Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带有重音符号的字母表的正则表达式_Ruby On Rails_Ruby_Regex - Fatal编程技术网

Ruby on rails 带有重音符号的字母表的正则表达式

Ruby on rails 带有重音符号的字母表的正则表达式,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我为名字和姓氏写了一个验证: validates(:name,, format: { with: /\A[a-zA-Z]+\z/}) 这只适用于字母表,但现在还需要使用重音字符对其进行扩展 可能的通行证情况: Mike Clark Chloé André Mike1 21Clark André3 Chloé# 可能的故障情况: Mike Clark Chloé André Mike1 21Clark André3 Chloé# 要像在正则表达式中那样添加所有字母范围太难了,幸运的

我为名字和姓氏写了一个验证:

validates(:name,, format: { with: /\A[a-zA-Z]+\z/})
这只适用于字母表,但现在还需要使用重音字符对其进行扩展

  • 可能的通行证情况:

    Mike
    Clark
    Chloé
    André
    
    Mike1
    21Clark
    André3
    Chloé#
    
  • 可能的故障情况:

    Mike
    Clark
    Chloé
    André
    
    Mike1
    21Clark
    André3
    Chloé#
    

要像在正则表达式中那样添加所有字母范围太难了,幸运的是,这不是必需的,因为Ruby正则表达式有一个Unicode类别来匹配所有Unicode字母

你可以用

/\A[\p{L}\p{M}]+\z/
\p{L}
将匹配所有Unicode字母,
\p{M}
将匹配所有变音符号

请参见演示此正则表达式如何工作的。以下是一个示例方法:

def checkName(name)
    return /\A[\p{L}\p{M}]+\z/  =~ name ? true : false
end

有以前的ASCII-8重音字符,此regexp不处理这些字符。@mudasobwa:请提供此类字符串的示例。什么是ASCII-8重音字符?我说
\p{L}
匹配所有Unicode字母,它确实匹配。如果字符是预合成的,这就足够了。如果它们是多字节的,
\p{M}
应该匹配变音符号。哦,对不起,我没有理由用方括号作为括号。请不要理会。谢谢@Wiktor。这真的很有帮助:)