2010-01-21 102 views
1

如何驗證名稱和姓氏的正則表達式,以便每個單詞以大寫字母開頭? 這不起作用:@? 「[^ AZ] [AZ] *」RegexValidator名稱和姓氏

感謝

+3

「德布羅意」這樣的名字怎麼樣? – Seth

+0

還是O'Malley?還是麥當勞? –

+0

是的..你可能最好只是看特殊字符,並假設人們正確輸入自己的名字。 – Ipsquiggle

回答

2

試試這個:

[A-Z][a-z]* 

注意,這是,但是,沒有一個很好的方法來驗證名。根據區域設置,可能會使用非ASCII UTF8字符。另外,並非所有名稱都以大寫字母開頭。下列名稱在現實世界中存在:

Martha de Lange Norton 
Marcél du Toit 

因此,這是好一點 - 它只是確保每個字符是一個有效的一封信:

\p{L}+ 

這就是說,以最好的方式這可能取決於正則表達式引擎的實現,所以我們需要知道您正在使用的語言和/或正則表達式庫。

編輯根據您的回答:如果您需要分析在同一時間兩個字段,試試這個:

^[A-Z][a-z]*\s[A-Z][a-z]*$ 
+1

@「」在C#中定義了一個字符串字面值,消除了雙重轉義的需要。有助於正則表達式。 (雖然對於OP的正則表達式是多餘的,因爲沒有特殊字符)。 –

+0

所以我有: [RegexValidator(@「[A-Z] [a-z] *」,MessageTemplate =「Name must be valid!「,Ruleset =」validate_name「)] 然後測試通過以」laddf Ghu「爲例,這是不正確的(laddf不以大寫字母開頭) – qwerty

0

,指出它不與一個或多個資金啓動。 ^內的字符類意味着否定... [^A-Z]意味着除首都以外的一切。在括號之外,它表示'字符串的開始',我認爲這是你的意圖。你想這樣的:

^[A-Z]?[a-z]*一個或年初增加資本的,或

^[A-Z][a-z]*整整一個資本,或者

^[A-Z][A-Za-z]*爲首都的任何地方,但絕對一個開頭。

+0

因爲McGregor是合法的名字,但不要忘記O'Reilly。 –