regex - Ruby - 正则表达式允许 URL 中包含任何非 ASCII 中文字符

标签 regex ruby string unicode utf-8

我正在尝试为也包含中文字符的 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/

相关文章:

java - 根据空格在 java 中拆分一个字符串,用双引号和单引号转义那些空格,前面是\

php - 如何通过正则表达式去除MySQL的可执行注释

ruby - 在 ruby​​ 中调用 Klass::[] 和 Klass[] 有区别吗?

java - 计算字符串中的大写字母

javascript - 我无法在 javascript 中将对象从字符串解析为对象

C++正则表达式错误(未处理的异常)

c# - 正则表达式,匹配以 ) 结尾的字符串并忽略中间的任何 ()

ruby - 解码base64字符串并写入文件

ruby-on-rails - Rails 最佳实践误报未使用的方法

c++ - 自动为自定义异常添加前缀