Подтвердить регулярное выражение для почтового индекса Канады

У меня есть сценарий, написанный на JavaScript для проверки канадских почтовых кодов с использованием Regex, однако он, похоже, не работает. Вот сценарий:

Если утверждение:

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; } 

Функция:

 function okNumber(myform) { var regex = /^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[AZ]{1} *\d{1}[AZ]{1}\d{1}$/; if (regex.test(myform.zip.value) == false) { alert("Input Valid Postal Code"); myform.zip.focus(); return false; } return true; } 

Related of "Подтвердить регулярное выражение для почтового индекса Канады"

это будет работать для всех канадских почтовых кодов ..

 ^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[AZ]{1} *\d{1}[AZ]{1}\d{1}$ 

Подход регулярного выражения может проверять формат канадского почтового индекса , но этого недостаточно, чтобы гарантировать, что почтовый индекс действительно существует .

Например: A9A 0A0 выглядит как действительный канадский почтовый индекс, но область прямой сортировки A9A фактически не существует .

Вы уверены, что не захотите сделать какой-то поиск против официального списка почтовых индексов?

Вот правила: http://en.wikipedia.org/wiki/Postal_code#Reserved_characters

 ABCEGHJKLMNPRSTVXY <-- letter used DFIOQU <-- letters not used because it mixes up the reader WZ <-- letters used but not in the first letter With that in mind the following in the proper regex @[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][\s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9] 

Первая ошибка – это последнее условие в вашем исходном выражении if. myform.zip.value.length < 12 всегда должно быть правдой, поэтому в этой части вашего кода всегда будет отображаться сообщение "Please fill in field Postal Code. You should only enter 7 characters" и сфокусируйтесь на поле zip . Поскольку действительный почтовый код имеет не более 7 символов, его следует изменить на myform.zip.value.length > 7 .

После внесения этой поправки T2X 1V4 почтовый код T2X 1V4 который вы T2X 1V4 в комментариях. Однако используемое регулярное выражение может быть упрощено (как было отмечено в комментариях). Вы можете удалить все экземпляры {1} поскольку они избыточны. Вы, вероятно, также хотели следить за пространством ? вместо * . A ? означает, что предыдущий символ или выражение могут отображаться 0 или 1 раз, а * означает, что он может отображаться 0 или более раз. Я думаю, вы хотите не более одного места в своих почтовых кодах.

Вот полный рабочий код, который я тестировал с помощью:

 <!doctype html> <html> <head> <title>JavaScript Regex Tester</title> <meta charset="utf-8"> <script> function validate(myform) { if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length > 7 ) { alert("Please fill in field Postal Code. You should only enter 7 characters"); myform.zip.focus(); return false; } return okNumber(myform); } function okNumber(myform) { var regex = /^[ABCEGHJKLMNPRSTVXY]\d[AZ] *\d[AZ]\d$/; if (regex.test(myform.zip.value) == false) { alert("Input Valid Postal Code"); myform.zip.focus(); return false; } return true; } </script> </head> <body> <form action="#" name="myform" method="post"> <input type="text" name="zip" value="Postal Code" /> <input type="button" value="Submit" onclick="validate(document.myform);"/> </form> </body> </html> 

Последнее замечание, обычно, когда вы видите [AZ] в регулярном выражении, стоит, по крайней мере, подумать, следует ли ему [A-Za-z] принимать буквы верхнего или нижнего регистра. Я не знаю, действительно ли это относится к канадским почтовым кодам, но обычно это так, что большинство форм должны принимать либо ввод, либо исправлять дело по мере необходимости.

Это допустимое выражение для Канадского почтового кода, который я использую. Он будет форматироваться строго как A0A 0A0.

 /^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/ 

Это будет сделано для канадского почтового индекса:

 /^[az][0-9][az][- ]?[0-9][az][0-9]$/i 

Это позволит использовать правильный формат X # X # X # с пробелом или дефис.