2016-11-25 1 views
0

Ich versuche, eine Regex an mein HTML-Formular für ein EU-Bankkonto zu binden. Bisher konnte ich zusammenzusetzen, dass:HTML regex space

pattern="[A-Z]{2}[000000000-999999999]{9} 

Wird etwas verstreichen lassen, die UK123456789

zum Beispiel, aber ich will es auch für UK12 2345 6789

passieren lassen Wie kann ich gehen über einen Platz an genau diesen Platzierungen zu akzeptieren?

+0

'[000.000.000-999.999.999] {9}' ist wie '[0-9] {9}' – Oriol

Antwort

2
pattern="[A-Z]{2}[000000000-999999999]{9}" 

dies nur Versehentlich tut was du willst. ([000000000-999999999] sagt „dieses Zeichen ein 0 sein soll oder ein 0 oder ein 0 oder ... ein Zeichen im Bereich von 0-9 oder ein 9 oder ein 9 oder ... eine 9). Die richtige Form ist:

pattern="[A-Z]{2}[0-9]{9}" 

oder genauer gesagt:

pattern="[A-Z]{2}\d{9}" 

Nachdem wir nun etwas mehr rational haben, können wir das erweitern:

pattern="[A-Z]{2}\d{2}\s?\d{4}\s?\d{4}" 

, die optionale Leerzeichen an den spezifischen Positionen ermöglicht.

Wenn Sie nur Räume eher als jedes Leerzeichen zulassen möchten, können Sie tun:

pattern="[A-Z]{2}\d{2} ?\d{4} ?\d{4}" 
+0

Würde das nicht funktionieren? ''UK 123456789'.match (/ [A-Z] {2}? \ D {9}/g);' Scheint einfacher zu lesen, aber ich kenne Regex nicht gut. –

+0

@JaredFarrish Dieser Ausdruck würde sicherlich mit dieser Zeichenkette übereinstimmen, aber diese Zeichenkette ist nicht von einer Form, die OP wollte. Außerdem ist das "g" unnötig, da nur die erste Übereinstimmung benötigt wird. – Ouroborus

+0

Ich frage mich nur, welche Form fehlt, was das OP wollte? –

0

Sie können einen optionalen Whitespace mit \s? zulassen, obwohl dies Ihre Regex etwas länger macht. Im Folgende regex kann sowohl mit oder ohne Leerzeichen (DEMO)

\w{2}\d{2}\s?\d{4}\s?\d{4} 

Aber beachten Sie, dass eine europäische IBAN ist mehr als das, was Sie gebucht haben - obwohl ich nicht sicher bin, wie es in Großbritannien ist.

-1

Wenn Sie nicht egal, wo die Räume sind, solange es 9 Ziffern sind, können Sie alle Felder entfernen, bevor Überprüfung:

str = 'UK12 234 56789'; 
 
strToCheck = str.replace(/ /g, ''); 
 
validStr = strToCheck.match(/[a-zA-Z]{2}\d{9}/); 
 
if (validStr) { 
 
    console.log('Valid'); 
 
}

+0

Ich bemerke, dass das OP nur die Leerzeichen an bestimmten Stellen validieren möchte. In diesem Fall ist meine obige Antwort nicht korrekt, da sie mit Leerzeichen an beliebigen Stellen in der Zeichenfolge validiert wird. Das heißt, in der Praxis bin ich mir nicht sicher, warum es sich nicht lohnt, Räume an unerwarteten Orten zu validieren, vorausgesetzt, es gibt genügend Buchstaben und Ziffern. – sideroxylon