редактировать
Я немного поиграл с этим ... не знаю, будет ли это соответствовать 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, p.o, p.o., po box, box, bin, и т. Д., И т. Д. Но дорога поло, testboxtest и т. Д.: Без предупреждения. Одна ошибка: ро-роуд и ошибка ... Я не уверен, что вы можете протестировать 100% случаев в одном Regex.
конец редактирования
Ладно ... Мастер регулярных выражений, похоже, не в сети ... Я попробую:
Попробуйте это регулярное выражение (?:(?: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
для тестирования.
Соответствует:
- PO BOX 123
- PO BIN 1
- БИН 1
- P.O BOX 134
- P.O BIN 12
- P.O 12
- P.O. 12
- PO 123
Не соответствует:
- 123 боксерская дорога
- 123 коробка дороги
- 123 поло-роуд