0

我正在使用 jquery 脚本来验证表单字段。这很好用,但我想更改一个字段的验证以检查 IP 地址。

我想使用的正则表达式是:

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

如何修改以下内容以使用此功能?(这是验证电子邮件地址的方式)

jQuery("#Email").validate({
                expression: "if (VAL.match(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/)) return true; else return false;",
                message: "Should be a valid Email id"
            });
4

2 回答 2

1

"\" 字符在 javascript 中被认为是转义字符,应该加倍,因此它被逐字解释为 "\" 字符。引号也必须转义,尽管我看到您没有引号。

应用于您的正则表达式,它将是:

\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b

在您的代码的上下文中,那将是:

jQuery("#Email").validate({
    expression: "if (VAL.match(/^\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b$/)) return true; else return false;",
    message: "Should be a valid Email id"
 });

请注意,我在开头留下了“^”,在结尾留下了“$”,这意味着您希望整个字符串与我假设的正则表达式匹配。如果不是这种情况,您应该删除它们。我尚未测试该正则表达式是否符合您的要求,但如果不是,您应该能够应用上面编写的规则将其插入到上面编写的代码中。

编辑: 如果您希望进行更高级的检查,例如确定用户是否正在尝试 IP 但失败或者是否完全是其他东西,那么您可以修改表达式代码,如下所示:

function isValidInput(str) {
    if (str.match(/^\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b$/)) {
        return true; 
    } else if (str.match(/[0-9]+(\.[0-9]+){2,}/)) {
        return false;
    } else { 
        return true;
    }
}
jQuery("#Email").validate({
    expression: "isValidInput(VAL)",
    message: "Should be a valid Email id"
});

Notice that the expression now calls existing function "isValidInput" and consequently the code is no longer an eval string, so all escapes have been removed. The 2nd match checks for <number>.<number>.<number>+ in an attempt to catch someone attempting to insert a valid IP (but apparently not doing a very good job of it). Hope that helps!

于 2012-10-02T12:24:22.030 回答
0

假设正则表达式适用于 IP 地址,并假设您输入的 IP 地址是真的id="Email",这应该有效:

jQuery("#Email").validate({
    expression: "return (VAL.match(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/));",
    message: "Should be a valid Email id"
});
于 2012-10-02T12:22:46.093 回答