【问题标题】:Regex for url validation works in a tester but not in javascript function用于 url 验证的正则表达式在测试器中有效,但在 javascript 函数中无效
【发布时间】:2012-10-22 15:47:20
【问题描述】:

所以我正在做一个非常轻松的 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 亚当斯

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

【问题讨论】:

  • 检查this
  • 您需要对插入符号进行双重转义:否则 javascript 不会将反斜杠解释为反斜杠,因此永远不会转义正则表达式的插入符号
  • FWIW 我总是使用正则表达式行星.. regexplanet.com/advanced/javascript/index.html

标签: javascript regex


【解决方案1】:

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

【讨论】:

  • 执行 /regex/ 会产生一堆语法错误。我不确定以这种方式需要逃避什么,我仍然完全了解正则表达式。
  • @Adam - 这是因为在使用 /regex/ 语法时,您必须在正则表达式中转义 / 字符。
  • 使用 /regex/ 然后转义 / 字符做了我需要的。
【解决方案2】:

如果你想允许类似的东西

adamthings.com

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

john.doe

也是有效的。

那么你的正则表达式模式应该是这样的

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

只检查链接的域部分。

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

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

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

» Test link «

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2011-12-10
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多