javascript - RegEx 规则强制开始字符串并允许 Intranet 链接
问题描述
我需要在 JavaScript 中使用 RegEx 来匹配一些 URL 规则:
- 应该以
http
,https
,ftp
,ftps
或mailto:
(必填)开头 www
是可选的a-z
,A-Z
,0-9
和一些特殊字符.:-/
是允许的
由于我对 RegEx 不太熟悉,因此我尝试使用在答案中找到的这个(第二个答案@foufos):什么是匹配 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,})
现在这个正则表达式匹配我需要的所有链接,除了两个:例如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
,但不应该,因为它必须以http
、https
、ftp
或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
不应该匹配的列表:-www.google.com
有什么输入吗?
解决方案
此正则表达式匹配您的字符串,但不验证它们。这意味着 - 它仍然包括所有被禁止的字符 - 例如昏迷。电子邮件不必有@ - 它只是查找非空白字符,直到每行的末尾:
(?:(?:(?:(?:http(?:s)?)|(?:ftp(?:s)?)):\/\/)|(?:mailto:))[^\s]*
推荐阅读
- http - Apache访问日志:映射单个网页的多个http请求日志的属性
- c++ - 为什么这段代码返回 -nan(ind)?c++
- java - Java 从另一个类更新表视图单元格值
- hadoop - Hadoop单节点启动问题
- python - 摆脱pygame中的递归
- angular - 将产品添加到购物车中,使用 Angular 6 在购物车页面中多次显示的总金额
- dart - 变量hintText TextField
- c# - 对每个方法的自定义内核/线程数并行执行两个方法
- html - 如何在 shopify 中为博客文章中的特定 div 指定独特的样式?
- android - 找不到类“android.support.v4.app.FragmentManagerImpl”