2016-02-11 103 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