2016-02-11 132 views
2

字母我写的第一个和最后一个名称的验证:正则表达式重音

validates(:name,, format: { with: /\A[a-zA-Z]+\z/}) 

这只适用于字母,但现在需要将它与重音字符也延长。

  • 可能通方案:

    Mike 
    Clark 
    Chloé 
    André 
    
  • 可能失败的情况:

    Mike1 
    21Clark 
    André3 
    Chloé# 
    

回答

3

这将是太难添加所有字母范围在你的正则表达式,幸运,因为Ruby正则表达式具有用于匹配所有Unicode字母的Unicode类别类,所以没有必要。

您可以使用

/\A[\p{L}\p{M}]+\z/ 

\p{L}会匹配所有Unicode字母和\p{M}会匹配所有的变音符号。

请参阅IDEONE demo显示此正则表达式的工作原理。下面是一个示例方法:

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

有一些以前的ASCII-8重音字符,不由此正则表达式处理。 – mudasobwa

+1

@mudasobwa:请提供一个这样的字符串的例子。什么是* ASCII-8重音字符*?我说'\ p {L}'匹配所有Unicode字母,并且它会。如果角色被预先分解,那就足够了。如果它们是多字节,'\ p {M}'应该匹配变音符号。 –

+0

哦,对不起,我没理由把方括号当作括号。请忽略。 – mudasobwa