2012-01-19 74 views
9

簡單問題:現有項目允許我添加其他字段(對這些字段進行額外檢查作爲正則表達式)以支持自定義輸入表單。我需要添加一個新表單,但不能改變這個項目的工作方式。這種形式允許訪問者輸入他的姓名和首字母。所以RegEx ^[a-zA-Z.]*$現在工作得很好。
然後有人發現它不會接受變音字符作爲輸入。土耳其的名字如Ömür未被接受爲有效。但它需要被接受。使用正則表達式檢查變音符號

所以,我有兩個選擇:

  1. 完全拆下檢查,這將允許用戶進入垃圾。
  2. 編寫一個正則表達式,其中還會包含變音符號但仍不包含數字,空格或其他非字母。

由於我無法更改項目的代碼,我只有這兩個選項。我寧願選擇2,但現在想知道正確的RegEx應該是什麼。 (該項目是寫在C#4.0。)

+0

你打算如何處理某人合法更改其姓名的書面形式爲字符序列「42 79」?有些人做這樣的愚蠢的東西... –

+0

那麼,一個名爲「42 79」的人將被輸入爲「Fourtytwo Zeventynine」。 :-)另外,並非所有國家都允許他們的公民成爲這個愚蠢的人。 :-) –

+1

撇開地方監管,如果我的名字是「42 79」,有人把它放在一些poxy DB中作爲「Fourtytwo Zeventynine」,我會要求他們改變他們的數據庫,因爲它會形成錯誤。更重要的是,人們有多個單詞的姓氏(可能或不易大寫)和帶有撇號的姓氏(愛爾蘭姓氏常見)以及其他一些事物。名字很難驗證。 –

回答

21

您可以使用字母特定Unicode轉義 - \p{L}(這將包括A-Za-z範圍):

^[.\p{L}]*$ 

查看regularexpressions.info

\ p {L}或\ p {Letter}

匹配具有屬性「letter」的單個Unicode代碼點。請參閱教程中的Unicode字符屬性以獲取完整的屬性列表。每個Unicode碼點只有一個屬性。可以在角色類中使用。

+1

如果您將'\ p {L}'添加到字符類,您可以刪除'a-zA-Z'。 – stema

+0

@stema - 好。答案已更新。 – Oded

+0

不錯的解決方案!問題解決了。 –