正则表达式 – Unicode和:alpha:

为什么这是假的:
iex(1)> String.match?("汉语漢語",~r/^[[:alpha:]]+$/)
false

但这是真的吗?

iex(2)> String.match?("汉语漢語",~r/[[:alpha:]]/)
true

有时[:alpha:]是unicode,有时它不是?

编辑:

我认为我原来的例子不够清楚.

为什么这是假的:

iex(1)> String.match?("汉",~r/^[[:alpha:]]+$/)
false

但这是真的吗?

iex(2)> String.match?("汉",~r/[[:alpha:]]/)
true
当您以非Unicode模式将字符串传递给正则表达式时,它将被视为字节数组,而不是Unicode字符串.请参阅IO.puts byte_size(“汉语汉语”)(12,输入所包含的所有字节:230,177,137,232,175,173,230,188,162,170,158)和IO.puts String.length(“汉语汉语”)(4,Unicode“字母”)的区别.字符串中有些字节无法与[:alpha:] POSIX字符类匹配.因此,第一个表达式不起作用,而第二个表达式起作用,因为它只需要1个字符来返回有效匹配.

要将Unicode字符串与PCRE正则表达式库(在Elixir中使用)正确匹配,您需要使用/ u修饰符启用Unicode模式:

IO.puts String.match?("汉语漢語",~r/^[[:alpha:]]+$/u)

IDEONE demo(打印真实)

Elixir regex reference

unicode (u) – enables unicode specific patterns like \p and changes modifiers like \w,\W,\s and friends to also match on unicode. It expects valid unicode strings to be given on match.

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) <script ...