Überprüfen Canadian Postal Code Regex
Habe ich ein Skript geschrieben in JavaScript zu Validieren Kanadischen Postleitzahlen mit Regex, aber es scheint nicht zu funktionieren. Hier ist das Skript:
If-Anweisung:
if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length < 12 ) {
alert("Please fill in field Postal Code. You should only enter 7 characters");
myform.zip.focus();
return false;
}
Funktion:
function okNumber(myform) {
var regex = /^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$/;
if (regex.test(myform.zip.value) == false) {
alert("Input Valid Postal Code");
myform.zip.focus();
return false;
}
return true;
}
- die
{1}
business ist sinnlos. Ein[]
Charakter-Klasse ist bereits eine implizite{1}
sowieso., gleiche mit\d
und jede andere Sache, entspricht einzelnen Zeichen. Darüber hinaus, wie das nicht funktioniert? Haben Sie überprüft, dass die Eingabe nicht haben führende/nachfolgende Leerzeichen? - Was ist ein Beispiel für eine input-und output? Oder ist es überhaupt nicht funktionieren
- Was sind die Regeln für eine gültige Kanadische Postleitzahl? Was die test-Eingänge hat dieser regex nicht auf?
- Funktioniert überhaupt nicht. Ein Beispiel für eine gültige PLZ wäre T2X 1V4
- Ich sehe nicht, okNumber genannt wird, überall in der ersten code-block... ist dieser code ausgeführt wird?
- Wenn ich es laufen lasse, bekomme ich füllen Sie Bitte im Feld PLZ. Sie sollten nur geben Sie 7 Zeichen
Du musst angemeldet sein, um einen Kommentar abzugeben.
dieser Arbeit wird für alle kanadischen Postleitzahlen..
Einen regex-Ansatz überprüfen kann, ob die format eine Kanadische Postleitzahl, aber es ist nicht ausreichend, um zu garantieren, dass die PLZ tatsächlich existiert.
Beispiel:
A9A 0A0
sieht wie eine gültige Kanadische Postleitzahl, aber der forward sortation areaA9A
den es eigentlich nicht gibt.Sind Sie sicher, dass Sie würde nicht eher eine Art Nachschlage-gegen eine offizielle Liste der Postleitzahlen?
^[A-Z]\d[A-Z][ ]?\d[A-Z]\d$
funktioniert. Wenn diese regex funktioniert nicht in Ihrem Programm haben, kann ein Logik-Fehler (true statt false?), sein Aufruf der regex-code falsch oder nicht der Aufruf an alle.Hier sind die Regeln
http://en.wikipedia.org/wiki/Postal_code#Reserved_characters
Der erste Fehler ist die Letzte Bedingung in deiner ersten if-Anweisung.
myform.zip.value.length < 12
sollte immer true sein, so dass dieser Teil des Codes wird immer alert die Nachricht"Please fill in field Postal Code. You should only enter 7 characters"
und den Fokus zurück auf diezip
Feld. Da eine gültige Postleitzahl maximal 7 Zeichen lang sein, dies sollte geändert werden, ummyform.zip.value.length > 7
.Nachdem Sie die Korrektur, die Postleitzahl
T2X 1V4
Sie in die Kommentare überprüft. Jedoch der reguläre Ausdruck, den Sie verwendet, vereinfacht sich (wie auch erwähnt in den Kommentaren). Sie können entfernen Sie alle Instanzen von{1}
da Sie redundant ist. Sie haben wahrscheinlich auch gedacht, zu Folgen, den Raum mit einer?
statt einer*
. Ein?
bedeutet, dass die vorherigen Zeichen oder Ausdruck erscheinen kann, 0 oder 1, während ein*
bedeutet, dass es kann vorkommen 0 oder mehr Zeiten. Ich denke, Sie wollen höchstens einen Platz in Ihrem Postleitzahlen.Hier nochmal der komplette funktionierende code, getestet habe ich dies mit:
Eine Letzte Anmerkung, in der Regel, wenn Sie sehen
[A-Z]
in einem regulären Ausdruck, lohnt es sich zumindest zu überlegen, ob es sein sollte[A-Za-z]
zu akzeptieren, entweder gross-oder Kleinbuchstaben verwenden. Ich weiß nicht, ob dies der Fall ist, für Kanadische Postleitzahlen, aber es ist in der Regel der Fall ist, dass die meisten Formen annehmen sollte, entweder als Eingabe und korrigieren Sie den Fall als notwendig.Dies ist ein Gültiger Ausdruck für eine Kanadische Postleitzahl, die ich benutze.
Es wird-format, wie streng A0A 0A0.
Wird dies tun, für Canadian postal code:
Wird es ermöglichen, die für die ordnungsgemäße X#X #X# format mit einem Leerzeichen oder Bindestrich.
Lösung für Sie zu beantworten, wird es helfen, hoffe ich. Vielen Dank für Ihre Zeit
}