2017-02-09 4 views
0

ich ein Problem mit regex haben Muster zu entsprechen und auch numer der Zeichen:RegexMuster zu entsprechen und auch numer der Zeichen,

Zum Beispiel habe ich erlaubt Nummernpräfixe: 2, 31, 32, 35, 37, 38, 39, 41, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60

dann möchte ich nur Zahlen und maximale Länge von diesem Ganzen zu 9 gleich. So zum Beispiel Nummer wie: 255555555 wird in Ordnung sein, aber 31555555555555555 wird nicht sein.

Hier ist mein Versuch, dieses Problem zu lösen, aber es, wie es sollte nicht funktioniert:

^((2|31|32|35|37|38|39|41|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60)+[0-9]*){9}$ 
+1

mit Ihrem regex Seien Sie vorsichtig - wenn Ihnen genau, wie Sie es in Ihrer Frage gestellt haben, könnten diese Räume von entscheidender Bedeutung sein - Sie können nicht Pad Regexes mit Leerzeichen aus, um sie sieht schöner aus, wird der Whitespace ein Teil davon. –

+0

Nicht nur, dass sie schließlich Teil davon werden, sie werden sogar einige Regex-Parser Fehler verursachen, wenn sie nicht in Anführungszeichen gesetzt werden. – Binarus

Antwort

5

eine positive Vorschau verwenden zu begrenzen (aber nicht zusammenpassen) die Präfixe und dann genau 9 Ziffern entsprechen:

^(?=2|31|32|35|37|38|39|41|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60)\d{9}$ 
+0

Dies könnte reduziert werden – Toto

+1

@Toto, spielt keine Rolle. Das Prinzip ist wichtig. Ich werde keine Zeichensätze machen, nur um OP zu haben, um zu suchen, was ich gruppiert habe, wenn er die Zahlen ändern will. – ndn

1

Sie diesen regulären Ausdruck verwenden:

(^2\d{0,8}$)|(^(31|32|35|37|38|39|41|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60)\d{0,7}$) 

Hier ist ein live example.


Wenn Sie diese Regex nicht von irgendwo durch Zahlen generieren, können Sie reduzieren sie auf:

(^2\d{0,8}$)|(^(3[125689]|4[16789]|5[0-9]|60)\d{0,7}$) 

Hier ist ein live example.

1

Sie könnten zuerst die Länge und dann das Präfix testen.

function check(s) { 
 
    return /(?=^\d{1,9}$)^(2|3[125-9]|4[16-9]|5.|60)/.test(s); 
 
} 
 

 
console.log(['255555555', '31555555555555555', '33', '5a', '5', '50'].map(check));

Verwandte Themen