我正在尝试为也包含中文字符的 URL 编写正则表达式。编写这样的正则表达式的目的是每当遇到包含中文字符的 URL 时,它与 URL 不匹配并给出输出,因为找不到结果。
我有一个适用于普通 URL 的正则表达式,如下所示:
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
这涵盖了任何内容,例如 www.google.com
,但不适用于 http://www.James.com/
这样的 URL。
我还尝试了 Ruby 的 URI
模块来验证 URL,但它不起作用。
我正在使用Rubular检查我的正则表达式。
预期:Ruby
中的正则表达式,可验证任何 URL,包括任何语言(即法语、中文等)的字符及其查询字符串参数,如 http ://www.James.com/?abc=1234
.
最佳答案
我不确定你的正则表达式的其余部分(查询/路径部分),所以让我只关注主机部分。您需要使用 unicode 字符类,例如\p{L}
而不是仅 ASCII 的 [a-z]
。例如:
'http://www.詹姆斯.com/?abc=1234'.match(/^(https?:\/\/)?([\d\p{L}\.-]+)/)
# => #<MatchData "http://www.詹姆斯.com" 1:"http://" 2:"www.詹姆斯.com">
查看更多docs .
关于regex - Ruby - 正则表达式允许 URL 中包含任何非 ASCII 中文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58236030/