验证+正则表达式为Url

时间:2016-09-19 21:40:40

标签: javascript regex

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

规则如下:
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**  

1 个答案:

答案 0 :(得分:0)

/^(?!.{21,}|https?:)(?:www\.)?[^.\s@]+\.[^\s]+$/i

See this in Regex101

这是一个非常轻微的验证!故意这样做是为了允许非拉丁字符,因为JavaScript正则表达式不支持它们。

说明:

(?!.{21,}|https?:)这是一个negative lookahead,拒绝任何超过21个字符的字符串,或者任何以http:https:开头的字符串字符串。放置在模式的开头,它将立即拒绝,如果字符串太长,则不会通过正则表达式的其余部分。

(?:www\.)? - 使用non-capturing group匹配www.并使用? quantifier将其作为optinal组件。

[^.\s@]+ - 模式肯定应包含至少一个不是点或任何空格字符的符号,也不能包含@符号。最后一个包括,以防止技术精通的用户输入电子邮件而不是URL(他们可以犯的常见错误)。

\.后跟一个文字点

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

i - 使用不区分大小写的标记来确保不允许使用HTTP://之类的网址。虽然将URL转换为小写可能会更好,因为这样可以确保它们统一显示。

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