【问题标题】:Jquery Match() IP Address?Jquery匹配()IP地址?
【发布时间】:2012-10-02 12:18:13
【问题描述】:

我正在使用 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"
            });

【问题讨论】:

  • 刚刚有了另一个想法。是否可以查看 VAL 并确定它是否是数字然后验证为 IP,如果它是所有条目的文本?

标签: jquery regex match


【解决方案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"
});

请注意,表达式现在调用现有函数“isValidInput”,因此代码不再是 eval 字符串,因此已删除所有转义。第二场比赛检查<number>.<number>.<number>+,试图抓住有人试图插入一个有效的IP(但显然做得不好)。希望对您有所帮助!

【讨论】:

  • Neil - 谢谢,这似乎有效 :) 以任何方式查看 VAL 并确定它是否为数字,然后验证为 IP,如果它的文本允许输入?
  • @user1635970,是的,假设它与 IP 不匹配,您应该能够事后进行检查。我会更新我的答案。
  • @Neil 如果您不介意,我想在我的项目中使用您的代码
  • @D.Tate 绝对不是。我会把它当作一种恭维。 :)
【解决方案2】:

假设正则表达式适用于 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-06-26
  • 2019-06-03
  • 2011-02-11
  • 2012-07-01
  • 2022-03-03
  • 2012-12-13
  • 2021-06-23
  • 1970-01-01
  • 2020-12-01
相关资源
最近更新 更多