Iphone 正则表达式名称和姓氏

Iphone 正则表达式名称和姓氏,iphone,objective-c,regex,Iphone,Objective C,Regex,我需要验证信用卡上的名字和姓氏。 例如:“兰格诺顿”或“兰格诺顿” 我使用以下代码: NSString *nameRegex = @"^[A-Z][a-z]*[\pL\pM\p{Nl}][A-Z][a-z]*$"; NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex]; return [nameTest evaluateWithObject:nameSurname];

我需要验证信用卡上的名字和姓氏。 例如:“兰格诺顿”或“兰格诺顿” 我使用以下代码:

NSString *nameRegex = @"^[A-Z][a-z]*[\pL\pM\p{Nl}][A-Z][a-z]*$"; 
NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex]; 
return [nameTest evaluateWithObject:nameSurname];
我有一个空白的问题。 “未知转义序列'\p'”
我该怎么办?

您应该找到匹配空白的正确转义序列。
尝试
\s
而不是
\p

我想你错过了一些小括号

NSString *nameRegex = @"^[A-Z][a-z]*[\p{L}\p{M}\p{Nl}][A-Z][a-z]*$";
如果您还需要whitspace,请添加
\s

您可以找到这些属性的列表(
\p{L}\p{M}\p{Nl}
内容)

\p{L}或\p{Letter}:来自任何语言的任何种类的字母

\p{M}或\p{Mark}:一个字符,用于与另一个字符组合 字符(例如重音、元音、包围盒等)

\p{Nl}或\p{Letter_Number}:看起来像字母的数字,如 作为罗马数字

此外,我认为你的表达不正确

您的字符串需要以
[A-Z]
开头,后跟
[A-Z]*
(也可以是零),然后只需其中一个
[\p{L}\p{M}\p{Nl}]
另一个大写ASCII字母,后跟小写字母


如果人的名字是“ReneéMüller”,会发生什么呢?

我同意Spudley的观点,但是如果你坚持要验证这个名字,你应该允许卡片上有几个名字。这将验证无限数量的名称

[\sA-Za-z]+

Mb
\p{L}
-它表示Unicode字母中的任何字符,但我不知道,您的正则表达式引擎是否支持此操作。

不确定从何处获得的转义序列
\p
,但正如错误所述,它无效

[编辑]实际上,它是有效的,但不是您使用它的方式

空格的正确转义序列是
\s
。这将匹配任何有效的空白字符(其中有相当多的空白字符,而不仅仅是普通空格)


但是,由于您只验证ASCII字符,因此可以同样轻松地使用常规空格字符-即不需要转义;只需按键盘上的空格键。这是正则表达式字符串中完全可以匹配的有效字符。

要进行名称验证,实际上比手工制作正则表达式要多得多。下面是一个PHP自然名称解析器:

如果我找不到一个客观的C端口,我会自己做并在这里发布

2013年2月7日编辑:

这是我的端口,供您轻松编码:

试试这个:

([^\s]+)\s([^\s]+)(.*)
不要忘记在objective-c中转义\s:

NSString *nameRegex = @"([^\\s]+)\\s([^\\s]+)(.*)";
NSPredicate *nameTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", nameRegex];
return [nameTest evaluateWithObject: nameSurname];
这将检查[任何非空格的内容],然后检查[空格],然后检查[任何非空格的内容],然后检查[任何内容]

不会与名称一起使用,例如“宮本茂"


将包括像“John Smith(很多空格)Jr”这样的名字

我也不熟悉转义序列,\p应该做什么?看看这里,为什么验证人们的名字是个坏主意:(但也就是说,如果信用卡有关于他们接受的名字的规则,那么你显然可以遵守这些规则)@乔是我找到的第一个地方。(是的,这是Objective-C,但我知道:)。信用卡上的名字可以包含字母以外的字符。例如,我的名字包含一个点。