我对url使用以下验证:
jQuery.validator.addMethod("urlValidatorJS", function (value, element) {
var RegExp = (/^HTTP|HTTP|http(s)?:\/\/(www\.)?[A-Za-z0-9]+([\-\.]{1}[A-Za-z0-9]+)*\.[A-Za-z]{2,40}(:[0-9]{1,40})?(\/.*)?$/);
return this.optional(element) || RegExp.test(value);
}, "The url is incorrect");
由于某种原因,根据上述验证,以下无效网址有效: http://www.example.com/%20here.html(带空格的网址)。
如何修复验证?
答案 0 :(得分:1)
(\/.*)?
您说URL中的(可选)最后一项是斜杠,后跟任意数量的任何字符。
如果您不想允许空格,请比.
更具体。
答案 1 :(得分:1)
首先:已经有一个jQuery的验证模块,您可以使用它。
这将是你的正则表达式,以匹配你提到的URL(最后不要错过i标志!):
/^(https?:\/\/)(?:[A-Za-z0-9]+([\-\.][A-Za-z0-9]+)*\.)+[A-Za-z]{2,40}(:[1-9][0-9]{0,4})?(\/\S*)?/i
您错过了可能还有其他地址,例如http://some.other.example.com
。另外,如其他答案所述,您的标识符.
过于贪婪。对于任何非空格字符,我将其替换为\S
。您还在正则表达式的第一部分中添加了一些不必要的标识符,例如{1}
和其他HTTP
。
您还可以使用regex101之类的网页来检查您的正则表达式并尝试使用不同的字符串。它还解释了正则表达式的每个部分,以便您可以更好地调试它。