Регулярное выражение, не работающее с плагином проверки правильности формы jquery

Я использую плагин проверки формы и использую регулярное выражение для проверки почтового кода Великобритании. Я использую это регулярное выражение ссылки, в котором автор говорит, что он может проверять весь почтовый код. Но когда я пытаюсь представить форму, для каждого типа строки она считается недействительной. Я попробовал следующее (образцы взяты из wikipedia Вот страница

W1A 1HQ
EC1A 1BB
M1 1AA
B33 8TH

Вот мой код JS

$(document).ready(function(){
$.validator.addMethod("regex", function(value, element, regexp) { var re = new RegExp(regexp); console.debug(re.test(value)) return this.optional(element) || re.test(value); }, "Post code is not valid"
);
$("#addPropertyForm").validate({ rules : { postCode : { required : true, regex: "(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})" } }, messages : { postCode : { required : 'Post code is required', } }, *******: false, onblur: true, focusCleanup: true, focusInvalid: false
});
});

Может ли кто-нибудь любезно помочь мне, что не так с этим кодом

2 ответа

Не проверяя код регулярного выражения, я вижу, что он не соответствует пробелу (если не в первом блоке и последнем...): возможно, вам просто нужно удалить пробелы из вашего почтового индекса (" W1A 1HQ EC1A 1BB M1 1AA B33 8TH "в вашем тестовом примере, если я правильно понял) перед сопоставлением с регулярным выражением?

UPDATE: OP действительно исправил вопрос (тестовые коды, где 4 разных...), поэтому мой вышеприведенный ответ больше не имеет смысла... :-)

Пожалуйста, будьте предупреждены, что регулярные выражения входят в разные "ароматы"... Например, JS-аромат отличается от Perl one... Возможно, вы не можете использовать заданное регулярное выражение в JavaScript "как есть", но вы, вероятно, должны "варить" его в аромате JS... :-)

См. Также здесь и здесь, где дается (возможно) лучшее регулярное выражение:

^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$


Есть некоторые странные битки об этом.

Прежде всего, приведенный вами почтовый индекс - это, по сути, конкатенация четырех почтовых индексов: W1A 1HQ, EC1A 1BB, M1 1AA и B33 8TH.

Во-вторых, регулярное выражение записывается в другом dialext, чем в JavaScript (я не знаю, какой из них). Выражение [AZ-[IJZ]] вероятно, означает "любая прописная буква, отличная от I, J и Z ". В Javascript это означает "Любая заглавная буква или - или [ за которой следует ] ". В нем есть и некоторые ненужные скобки.

Я не нашел времени, чтобы исправить регулярное выражение. Однако я удалил несколько бит, чтобы проверить, есть ли какие-либо другие проблемы. Таким образом, этот должен соответствовать всем действительным почтовым индексам (а также многим недопустимым):

/(GIR 0AA|[AZ][0-9][0-9]?|[AZ][AZ][0-9][0-9]?|[AZ][0-9][A-HJKSTUW]|[AZ][AZ][0-9][ABEHMNPRVWXY]) [0-9][AZ]{2}/

licensed under cc by-sa 3.0 with attribution.