RegEx规则强制字符串开始并允许Intranet链接

时间:2019-06-25 12:06:13

标签: javascript regex url

我需要JavaScript中使用的RegEx来匹配某些URL规则:

  • 应以httphttpsftpftpsmailto:开头(必需)
  • www是可选的
  • a-zA-Z0-9和一些特殊字符.:-/都是

由于我对RegEx不太熟悉,因此我尝试使用在答案(第二个答案@foufos)中找到的答案:What is a good regular expression to match a URL?

/^(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9/]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9/]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9/]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})

现在此RegEx匹配我需要的所有链接,除了两个: 例如http://intranet/index.html mailto:sample@sample.com

所以我尝试对其进行修改,并添加了mailto:规则:

/^((http(s)?)|(ftp(s)?):\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,}|(mailto:){1}([\w\.]+)\@{1}[\w]+\.[\w]{2,})\s$/gm;

目前,有两件事不起作用:

  • url匹配:www.google.com,但不应匹配,因为它必须以httphttpsftp,{ {1}}或ftps(必填)。我只是将mailto:放在了?之后,所以只有这才是可选的。为什么这不起作用?

  • (s)仍然不匹配:url,但我认为,我对特殊字符http://intranet/index.html有正确的规则。

测试:.:-/的列表应匹配:

  • URL
  • https://www.sample.com
  • https://www.sample-sample.com
  • http://www.sample.com
  • http://www.sample-sample.com
  • https://sample-sample.com
  • http://sample-sample.com
  • ftps://sample-sample.com
  • ftp://sample-sample.com
  • ftps://sample.sample.com:3000
  • ftp://sample.sample.com:3000
  • http://intranet/index.html

mailto:sample@sample.com的列表不应匹配: -URL

有输入吗?

2 个答案:

答案 0 :(得分:0)

最简单的正则表达式:

^(((https?|ftps?):\/\/)|(mailto:))[a-zA-Z0-9\.:\/@-]*$

您可以在这里https://regex101.com/r/F1SqQo/1

它不会检查URL是否遵循所有规则,也不检查电子邮件地址的有效性。

答案 1 :(得分:0)

此正则表达式与您的字符串匹配,但不验证它们。这意味着-它仍然包括所有禁止使用的字符-例如昏迷。电子邮件不必带有@-它会查找非空格字符,直到每一行的末尾:

(?:(?:(?:(?:http(?:s)?)|(?:ftp(?:s)?)):\/\/)|(?:mailto:))[^\s]*