4

我目前正在为一个站点使用 jQuery 和 jquery ValidationEngine,它就像一个魅力。问题是我需要添加检查(和禁止)邮政信箱地址的功能。我环顾四周,找不到验证引擎可以正确使用的正则表达式。

我确实找到了一个适用于 Javascript 的正则表达式:

\b[p]*(ost)*\.*\s*[o|0]*(ffice)*\.*\s*b[o|0]x\b

但是当我将该正则表达式从普通的 javascript 函数移动到验证引擎语言文件中时,正则表达式匹配所有内容,甚至是文本字段中的空白条目。

我添加到 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;" />

有什么方法可以让这个正则表达式在验证引擎框架内工作并正确匹配?我已经验证了正则表达式确实可以在页面中我自己的 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上进行了检查,发现在各种条目(邮政信箱、邮政信箱、邮政信箱等)上都符合预期

任何帮助,将不胜感激。

银虎

4

2 回答 2

2

当您定义自定义验证时,regex将测试以验证该值是否与表达式匹配,如果不匹配,则会生成验证错误。

当值 邮政信箱值时,您定义它的方式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"
}, 

这个 JSFiddle 中的一个工作示例

于 2013-04-21T02:39:56.323 回答
1

根据 Mads Hansen 的帖子的指示,我找到了一个正则表达式函数“逆变器”,它允许我使用现有的正则表达式代码并过滤相反的代码:

/^((?!foo).)*$/i,

对我有用的“invreted”邮政信箱搜索的最终代码如下:

"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"
},
于 2013-04-21T07:03:27.153 回答