"\" 字符在 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!