我目前正在为网站使用jQuery和jquery ValidationEngine,它就像一个魅力。问题是我需要添加检查(和禁止)P.O.的能力。盒子地址。我已经相当广泛地浏览了一下,并且无法找到validengine将正确使用的正则表达式。
我确实找到了一个适用于Javascript的正则表达式:
\b[p]*(ost)*\.*\s*[o|0]*(ffice)*\.*\s*b[o|0]x\b
但是当我将正则表达式从正常的javascript函数移动到validationengine语言文件时,正则表达式匹配所有内容,甚至是文本字段中的空白条目。
我添加到jquery.validationengine-en.js的正则表达式如下:
"notPoBox": {
"regex": /\b[p]*(ost)*\.*\s*[o|0]*(ffice)*\.*\s*b[o|0]x\b/,
"alertText": "* P.O. Box addresses are not allowed for shipping"
},
并且表单元素使用以下内容:
<input class="validate[custom[notPoBox]] text-input" type="text" id="ship_add1" name="ship_add2" value="" style="width:598px;" />
有什么方法可以让这个正则表达式在validationengine框架内工作并正确匹配?我已经验证了正则表达式确实可以在页面中使用我自己的javascript,因为我可以创建一个匹配并在匹配上发出警报的函数,如下所示:
function poChk() {
$("[id*='ship_add1']").blur(function() {
var pattern = new RegExp('\\b[p]*(ost)*\\.*\\s*[o|0]*(ffice)*\\.*\\s*b[o|0]x\\b', 'i');
if ($("[id*='ship_add1']").val().match(pattern)) {
alert('We are unable to ship to a Post Office Box.\nPlease provide a different shipping address.');
return false;
}
});
我还在http://www.regular-expressions.info/javascriptexample.html检查了它,它在各种各样的条目上找到了预期的匹配(p o box,po box,P.O。Box等)
任何帮助都将不胜感激。
此Silvertiger
答案 0 :(得分:2)
定义自定义验证时,regex
将测试验证 值 表达式,如果不是
当您 的值 PO Box值时,您定义的方式notPoBox
传递。
您需要检查正则表达式匹配的相反方向。
你可以通过使用函数并返回正则表达式test()
的否定值来实现:
"notPoBox": {
"func": function (field, rules, i, options) {
var isPoBox = /\b[p]*(ost)*\.*\s*[o|0]*(ffice)*\.*\s*b[o|0]x\b/i;
return !isPoBox.test(field.val());
},
"alertText": "* P.O. Box addresses are not allowed for shipping"
},
答案 1 :(得分:1)
根据Mads Hansen的帖子,我搜索了一个正则表达式函数“逆变器”,它允许我使用我现有的正则表达式代码并过滤相反的结果:
/^((?!foo).)*$/i,
“入侵”P.O.的最终代码对我有用的盒子搜索如下:
"notPoBox": {
"regex": /^((?!\b[p]*(ost)*\.*\s*[o|0]*(ffice)*\.*\s*b[o|0]x\b).)*$/i,
"alertText": "* P.O. Box addresses are not allowed for shipping"
},