У меня есть сценарий, написанный на 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; }
это будет работать для всех канадских почтовых кодов ..
^[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 # с пробелом или дефис.