jQuery ValidationEngine和PO Box

时间:2013-04-18 13:36:01

标签: jquery jquery-validation-engine

我目前正在为网站使用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

2 个答案:

答案 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"
}, 

A working example in this JSFiddle

答案 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"
},