【问题标题】:exclude certain email country domains using jquery validation plugin使用 jquery 验证插件排除某些电子邮件国家域
【发布时间】:2014-02-11 17:28:09
【问题描述】:

我正在尝试向 jquery 验证插件添加一个自定义规则,它将阻止该人输入国家域为“cu、ir、kp、sd、sv”的电子邮件地址。例如,用户将无法输入 johnsmith@yahoo.cu 或 johnsmith@yahoo.kp。

我尝试创建一个正则表达式,但它仍然允许我输入任何电子邮件国家域。

这是我目前所拥有的:

$.validator.addMethod(
                    "wrong_domain",
                    function (value,element,params) {
                        var emaildomain = new RegExp("(/cu$/) | (/ir$/) | (/kp$/) | (/sd$/) | (/sy$/)");
                        if (emaildomain.test(value)) return false;                      
                    },
                    'Not an acceptable email' );

我在浏览器控制台中没有任何错误。我对正则表达式不是很熟悉,所以任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: jquery regex validation plugins


    【解决方案1】:

    看起来您正试图在 RegExp 构造函数中创建多个正则表达式。每组斜线 (/) 旨在开始一个新的正则表达式,但您不能在 JS 构造函数中这样做。相反,试一试:

    var emaildomain = /\.(cu|ir|kp|sd|sy)$/i;
    if (emaildomain.test(value)) return false;
    

    或者干脆去掉中间人:

    if (/\.(cu|ir|kp|sd|sy)$/i.test(value)) return false;
    

    或者如果你还想使用对象构造函数:

    var emaildomain = new RegExp("\\.(cu|ir|kp|sd|sy)$", "i");
    if (emaildomain.test(value)) return false;
    

    【讨论】:

    • 感谢您的帮助@jakerella。我尝试了您的所有三种解决方案,但它仍然允许我进入任何国家/地区域。我需要更改“i”字符吗?这是我刚刚使用的: $.validator.addMethod( "wrong_domain", function (value,element,params) { var emaildomain = /\.(cu|ir|kp|sd|sy)$/i; if (emaildomain .test(value)) return false; }, 'Not an Acceptable email' );
    • 那么看起来问题不在于正则表达式,而在于验证插件或您的实现。该正则表达式适用于您帖子中的电子邮件地址(您可以在 Firebug/Dev 工具/等中检查它)。您确定正在调用该函数吗?也许您可以在其中添加 debuggerconsole.log() 语句以查看它是否被命中。
    • 顺便说一句,正则表达式末尾的i 使其不区分大小写。我猜你也不想允许“...@YAHOO.CU”。
    • 我发现了问题所在。此自定义验证规则干扰了我应用于电子邮件字段的另一个自定义验证规则。我还必须将字段类型从电子邮件更改为文本。
    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 2012-01-26
    • 2013-08-24
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多