проверка в jquery

Если задан адрес polo Rd, он идентифицирует "po" в polo и выдает сообщение об ошибке.

Итак, мы должны создать новую проверку, которая не должна принимать строки адреса 1 и 2 со значениями:

  • "PO BOX", "PO BIN", "BIN", "PO BOX", "P.O BIN", "P.O", "PO"
  • вышеуказанные значения могут быть в любом случае
  • пробелы до, между и после вышеуказанных слов также должны быть найдены и проверены. Например: "PO 1234" должен быть подтвержден и выдавать сообщение об ошибке.
  • Но «Polo Rd», «Robin Rd», «testbintest» должны быть приняты как действительный адрес в обеих адресных строках.

код, который написан для этого,

jQuery.validator.addMethod("nopobox", function(value, element) {
     return this.optional(element) || ! /(P(OST)?\.?\s*O(FF(ICE)?)?\.?\s*((BOX)|(BIN)))|(^[^0-9]*((P(OST)?\.?\s*O(FF(ICE)?)?\.?)|((BOX)|(BIN))))/i.test(value);
}, "");

Пожалуйста, дайте мне знать, как я могу изменить его


person raj    schedule 04.08.2009    source источник
comment
Я думаю, что некоторые из ваших кодов исключают другие условия, например, вы хотите, чтобы BIN не прошел проверку, а testbintest прошел ее, однако вы говорите, что BIN может быть в любом случае и в любой позиции во входной строке.   -  person RaYell    schedule 04.08.2009
comment
да P.O.BIN должен пройти проверку, но нормальные адресные строки, строка robin street или hobin road, должны пройти проверку   -  person raj    schedule 04.08.2009


Ответы (1)


изменить

Я немного поиграл с этим... не знаю, будет ли это соответствовать 100% ваших случаев, но попробуйте следующее:

<html>
   <head>
      <title>testing...</title>
      <script type="text/javascript" src="scripts/jquery/1.3.1/jquery.min.js"></script>
      <script type="text/javascript" src="scripts/jquery.validate.min.js"></script>
      <script type="text/javascript">
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.");

$(document).ready(function() {$('#test').validate({rules: {address: {nopobox: false, required: true}}})}); 
      </script>
   </head>
   </body>
      <form id="test" action="#">
         <input type="textbox" id="address" class="required nopobox" />
         <input type="submit" />
      </form>
   </body>
</html>

Когда я запускаю это, я получаю сообщение об ошибке «Почтовые ящики не разрешены» на: PO, po, po, po, po box, box, bin и т. д. и т. д. Но polo road, testboxtest и т. д.: без предупреждения. Одна ошибка: po road throws and error... Я не уверен, что вы можете протестировать 100% случаев в одном регулярном выражении.

завершить редактирование

Хорошо... Мастер регулярных выражений, похоже, не в сети... Я попробую:

Попробуйте это регулярное выражение (?:(?:p(?:[o|0]st)?\.?(?:[o|0](?:ffice)?\.?))|(?:b[o|0]x|bin))(?=\s\d)

Это дает мне следующее в powertoy: (введено как: s/(?:(?:p(?:[o|0]st)?\.?(?:[o|0](?:ffice)?\.?))|(?:b[o|0]x|bin))(?=\s\d)/**NO PO BOXES**/i для тестирования.

Матчи:

  • а/я 123
  • ПО БИН 1
  • БИН 1
  • Почтовый ящик 134
  • ПО БИН 12
  • P.O 12
  • P.o. 12
  • PO 123

Не соответствует:

  • 123 боксерская дорога
  • Коробка 123
  • 123 поло роуд
person beggs    schedule 04.08.2009
comment
Это не работает, и основным требованием является то, что дорога поло должна быть положительной, но почтовый ящик должен выдавать ошибку. Пожалуйста, ответьте мне в ближайшее время, спасибо за код, когда я заменяю его, его синтаксическая ошибка выдает jQuery.validator.addMethod (nopobox, функция (значение, элемент) { return this.Optional(element) || ! s/(?:(?:p(?:[o|0]st)?\.?(?:[o|0](?:office)?\. ?))|(?:b[o|0]x|bin))(?=\s\d)/**НЕТ Абонентских ЯЩИКОВ**/i для тестирования.; }, ); - person raj; 04.08.2009
comment
Я хочу, чтобы poland road, robin road работала, но po ​​box или po bin должны вызывать ошибку, не могли бы вы помочь мне с этой логикой, чтобы написать регулярное выражение, пожалуйста - person raj; 04.08.2009
comment
Я сделал все возможное (см. редактирование выше), и, похоже, в большинстве случаев это работает, теперь кто-то лучше, чем regex/jquery, должен будет помочь. - person beggs; 04.08.2009
comment
Привет, это выглядит круто, но робин-роуд также выдает ошибку. Вы знаете, что заставляет этот робин- или робок-роуд работать в вашем коде? - person raj; 05.08.2009
comment
Извините, это дает ложное срабатывание для всего, что заканчивается на «in», потому что «b» сгруппировано только с «[o|0]x, (?:p(?:ost)?\.?\s?[o|0](?:\.|ffice)?\b)|(?:\bb(?:(?:[o|0]x)|(?:in)))\s[\d]+ исправляет это. Однако я не уверен, что это решит все ваши проблемы. Вам нужно всесторонне протестировать его. Я провел небольшой тест: polo road = действительный, po = недействительный, почтовое отделение = недействительный, box = действительный, bin = действительный, box 123 = недействительный, bin 123 = недействительный, robin road = действительный и т. д. - person beggs; 05.08.2009