验证+ Url的正则表达式

Validation + Regex for Url

本文关键字:正则表达式 Url 验证      更新时间:2023-09-26

我正在寻找一个接受以下组合url的正则表达式:

规则如下:
1)不应该允许- http或http://或https或https://
2) WWW是可选的
3) url的总长度应为<= 20个字符

Given few possible sample text and its return value:   
https://sample.com   **-  false**   
https://www.sample.com   **- false**  
www.sample.com   **- true**  
sample123.com   **- true**  
2323sample.com   **- true**  
www.sample232.com   **- true**  
sample.co.uk   **- true**  
sample   **- false**  
.com   **- false**  
123445   **- false**  
/^(?!.{21,}|https?:)(?:www'.)?[^.'s@]+'.[^'s]+$/i

参见Regex101

这是一个非常轻的验证!这样做是为了允许非拉丁字符,因为JavaScript regex不支持它们。

解释:

(?!.{21,}|https?:)这是一个负向前看,拒绝任何长度超过21个字符的字符串,或者任何以http:https:开头的字符串。如果字符串太长,它将立即拒绝并且不遍历正则表达式的其余部分。

(?:www'.)? -使用非捕获组来匹配www.,并使用?量词使其成为最佳组件。

[^.'s@]+ -模式必须至少包含一个符号,该符号不是点或任何空白字符,也不是@符号。最后一个包括防止不太懂技术的用户输入电子邮件而不是URL(他们可能犯的常见错误)。

'.后面加一个点

[^'s]+模式以至少一个非空白字符结束。

i -使用不区分大小写标志来确保不允许像HTTP://这样的url。虽然将URL转换为小写可能更好,因为这将确保它们被统一显示。

如前所述,这是非常简单的验证。它将阻止用户输入一些大致无效的内容,但不会限制所有无效输入。您可以通过修改模式末尾的文字点字符周围的字符组中允许或不允许的内容来收紧要求。请注意,如果使用[a-z0-9]形式的字符组,有些有效的url可能会被标记为无效-这将允许非拉丁字符,例如西里尔字母或中文。JavaScript目前还不支持正则表达式中的UTF字符—如果需要验证UTF字符,则需要像XRegExp这样的库来处理它们。