2011-10-12 65 views
-2

如何爲名稱編寫正則表達式?如何爲名稱編寫正則表達式?

我想它來驗證下面的例子:

愛因斯坦

愛因斯坦

愛因斯坦

阿爾伯特einstIN

Ale'rt E'i 'n't'e'in

這些都應該被認爲是有效的。

這是我迄今爲止,但它失敗:

-(BOOL) validateName: (NSString *) name{ 

    NSString *nameRegex = @"(?:[A-Z]+[a-z' '])"; 
    NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex]; 
    return [nameTest evaluateWithObject:name]; 
} 

任何人都可以提出一個改進?

+1

你不能「驗證」用一個簡單的正則表達式的實際名稱,你只能驗證你決定什麼是可以接受的。有兩個以上的字,不尋常的字符,甚至可能是一個數字的名字pleple!例如:'比利鮑勃詹姆斯奧布萊恩Ⅻ' –

回答

0

正確的正則表達式是這樣的一個: ^ [A-ZA-Z] + $

這個正則表達式識別全部包含由空格分隔低/大寫字母的單詞。

您可以測試你的正則表達式here

+0

我想添加一個朱塞佩它可以採取這個例子Albe'rt E'i'n''t'e'in – user891268

+0

這個正則表達式也會幫助我很多 – user891268

+1

如果您想在有效字符的範圍內添加'只需將其添加到方括號內即可。即:^ [a-zA-Z'] + $ – Giuseppe

0

如果換在

你的表情(ismwx-ismwx:?...)

標誌設置。使用 指定標誌啓用或-disabled評估括號內的表達式。標誌在「標誌 選項」中定義。

不區分大小寫的標誌是i。

或者你可以使用

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"albert einstein" options:NSRegularExpressionCaseInsensitive error:&error]; 

但是,你需要指定名稱似乎有東西一般情況下...

0

^[A-Za-z]+(\s[A-Za-z]+)*$

它與

`阿爾伯特愛因斯坦,愛迪生阿蘭特斯做納西門託又名派勒

如果您需要的2個字使用:

^[A-Za-z]+\s[A-Za-z]+$