如何为名称编写正则表达式?

时间:2011-10-12 12:06:45

标签: regex

如何为名称编写正则表达式?

我希望它验证以下示例:

  阿尔伯特爱因斯坦

     

ALBERT EINSTEIN

     

ALBert EINstein

     

alberT einstIN

     

Ale'rt E'i'not'e'in

这些都应被视为有效。

这是我到目前为止所做的,但它失败了:

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

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

有人可以建议改进吗?

3 个答案:

答案 0 :(得分:0)

正确的正则表达式是这样的: ^ [a-zA-Z] + $

此正则表达式识别包含由空格分隔的低位/大写字母的单词。

您可以测试正则表达式here

答案 1 :(得分:0)

如果你将表达式包装在

  

(?ismwx-ismwx:...)

     

标记设置。用括号计算带括号的表达式   指定的标志启用或-disabled。标志在“Flag”中定义   选项“。

不区分大小写的标志是i。

或者您可以使用

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

但是你需要指定名称似乎具有一般性的上下文...

答案 2 :(得分:0)

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

适用于

阿尔伯特,阿尔伯特爱因斯坦,爱迪生Arantes do Nascimento又名贝利

如果您只需要2个单词,请使用:

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