使用Javascript进行URL验证并不顺利

时间:2015-12-08 07:15:15

标签: javascript validation

我对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(带空格的网址)。

如何修复验证?

2 个答案:

答案 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之类的网页来检查您的正则表达式并尝试使用不同的字符串。它还解释了正则表达式的每个部分,以便您可以更好地调试它。