Сбой регулярного выражения почтового ящика на адресах, содержащих слово «box»

#javascript #jquery #regex

#javascript #jquery #регулярное выражение

Вопрос:

Я использую следующее регулярное выражение почтового ящика в пользовательском методе проверки jQuery. Это работает в 90% случаев, но если кто-то вводит «21 box hill» — он думает, что это почтовый ящик и соответствует.

Что мне нужно изменить в моем регулярном выражении, чтобы это заработало?

 jQuery.validator.addMethod("nopobox", function(value, element) {
    return ! /(?:p(?:ost)?.?s?[o|0](?:.|ffice)?)b|(?:b(?:[o|0]x)|(?:in))b/i.test(value);
}, "PO Boxes are not allowed.");
  

Это те совпадения, которые мне нужны:

Совпадения: ПОЧТОВЫЙ ящик, почтовый ящик, почтовый ящик, POBOX123
Несоответствия: Почтовый холм, Бокс-Роуд

Комментарии:

1. Не зная, в каких случаях это происходит, а в каких нет, трудно предложить исправление. Возможно, вы можете привести нам пример того, на что оно должно повлиять (вы уже дали нам то, на что оно не должно повлиять)

2. Проверьте, нет ли цифр после слова «box»? Большинство адресов, которые указывают на фактический почтовый ящик, были бы «почтовым ящиком 12345»

3. И исключите любые с цифрами перед словом box.

Ответ №1:

Я нашел шаблон, который хорошо работает:

     var pattern = /^[P|p]*(OST|ost)*.*s*[O|o|0]*(ffice|FFICE)*.*s*[B|b][O|o|0][X|x]s*(d.)*/gi;