【问题标题】:JS URL regex, allow only urls and empty string [duplicate]JS URL正则表达式,只允许url和空字符串[重复]
【发布时间】:2020-07-03 23:19:03
【问题描述】:

我有以下正则表达式:

var regex = /^(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g;

function test() {
    alert(regex.test(document.getElementById("myinput").value));
}

我想允许 url 或空字符串。 请提供正则表达式解决方案
在这种情况下如何允许为空?
https://jsfiddle.net/6kptovwc/2/
谢谢

【问题讨论】:

  • if (document.getElementById("myinput").value) == '') ........
  • 为什么https://后面有一个点?
  • [a-z]{2,6} 是 TLD 的缩写,请参阅 TLD list
  • @Toto 感谢您的投入,请注意。无论如何,我一直在寻找正则表达式解决方案

标签: javascript regex url-validation


【解决方案1】:

添加一个空字符串的替代(我已经简化了你的正则表达式):

^((?:https?:\/\/)?(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[-a-zA-Z0-9@:%_\+.~#?&\/=]*|)$

^((?:https?:\/\/)?(?:www\.)?[-\w@:%.+~#=]{2,256}\.[a-z]{2,6}\b[-\w@:%+.~#?&\/=]*|)$

Demo & explanation

【讨论】:

  • 你觉得我的回答怎么样? (我找到了解决办法)
  • @SexyMF:注意你的正则表达式没有锚定,它匹配blah blahwww.blah.com$*!§?#~´&²(http(s)?:\/\/.)中的点匹配双斜杠和url之间的任何字符,例如@987654326 @另一个评论是当你不需要捕获时避免捕获组,更喜欢非捕获组。不过,如果它适用于您的所有测试用例,那很好;)
【解决方案2】:

只需添加 OR(||) 条件

function test() {
    const elm = document.getElementById("myinput")
    alert(elm.value === '' || regex.test(elm.value));
}

【讨论】:

  • 我的代码只是一个演示。我要求一个正则表达式解决方案。
【解决方案3】:
^$|pattern
var regex = /^$|(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2014-08-03
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多