用于url验证的正则表达式适用于测试人员,但不适用于javascript函数

时间:2012-10-22 15:47:21

标签: javascript regex

所以我有一个URL验证,我正在做的非常轻松,或多或少只是引导用户确保他们输入接近URL。

所以我有一个正则表达式正在我想要的测试人员。 (仅限多行选择) 例如:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

但是,当我在我的代码中调用它时,它会产生不同的结果。

isURLValid: function (value) {
    var urlRegex = new RegExp("^((http|https|ftp)\://)*([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$");
    return urlRegex.test(value);
}

要求: 必须支持http,https,非http,非https,www和非www URL方案

有效

http://www.adamthings.com
https://www.adamthings.com
www.adamthings.com
adamthings.com

无效

http://www.adamthings 
https://www.adamthings
www.adamthings
adamthings

结果在测试人员中工作,在代码中我得到的所有上述内容都是有效的。为什么正则表达式的反应不同?

2 个答案:

答案 0 :(得分:1)

在javascript中:"\.com" === ".com"(我认为这不是你想要的。)
请尝试/regex/而不是new RegExp("regex")来创建正则表达式。

答案 1 :(得分:0)

如果您想允许类似

的内容
adamthings.com

没有前导http://https://ftp://www.部分,那么您需要列出所有允许的TLD,例如comnet等,以防止输入

john.doe

也有效。

然后你的正则表达式应该看起来像

^(?:https?:\/\/|ftp:\/\/)?(?:www\.)?(?!www\.)(?:(?!-)[a-z\d-]*[a-z\d]\.)+(?:com|net)

只检查链接的域名部分。

如果您想进一步检查尾随部分或链接,则需要添加

(?:\/[^\/\s]*)*$

到模式的第一部分,但是这(正则表达式模式的一部分)不验证网址。

»Test link«