2011-10-12 67 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]+$