正则表达式中无法识别撇号 (')
Posted
技术标签:
【中文标题】正则表达式中无法识别撇号 (\')【英文标题】:Apostrophes (') is not recognised in regular expression正则表达式中无法识别撇号 (') 【发布时间】:2018-03-29 18:35:11 【问题描述】:我想要一个可以包含名字的正则表达式
1) 字母 2)空间 3)撇号
Exp: Raja, Raja reddy, Raja's,
我使用了这个 ^([a-z]+[,.]?[ ]?|[a-z]+[']?)+$
,但它无法识别撇号 (')。
- (BOOL)validateFirstNameOrLastNameOrCity:(NSString *) inputCanditate
NSString *firstNameRegex = @"^([a-z]+[,.]?[ ]?|[a-z]+[']?)+$";
NSPredicate *firstNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@",firstNameRegex];
return [firstNamePredicate evaluateWithObject:inputCanditate];
【问题讨论】:
我不知道为什么人们总是坚持验证姓名,但无论如何,只要^(?=[^a-zA-Z]*[a-zA-Z])[a-zA-Z,.' -]+$
kalzumeus.com/2010/06/17/…
它不适用于 (')。 O'Lary 的名字失败了。
【参考方案1】:
我可以推荐 ^[A-Z][a-zA-Z ']* 吗?
// The NSRegularExpression class is currently only available in the Foundation framework of ios 4
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[A-Z][a-zA-Z ']*" options:NSRegularExpressionAnchorsMatchLines error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:searchText options:0 range:NSMakeRange(0, [string length])];
return numberOfMatches > 1;
^[A-Z] : 强制从 A 到 Z 以大写字母开头
[a-zA-Z ']* : 后跟任意数量的字符,可以是 'a' 到 'z'、'A' 到 'Z'、空格或单引号
【讨论】:
感谢您的回复。我将您的答案与以下内容结合在一起。评论。 /*在 iOS 11 中,Apple 引入了“智能标点符号”,它会根据内容自动倾斜某些标点符号。 iOS 10:“双引号”、“单引号” iOS 11(开启智能标点符号):“双引号”、“单引号”/ 解决方案是:NSString *firstNameRegex = @"^[a-zA-Z ][a-zA-Z-''']"; @MuraliMohan 感谢^[a-zA-Z][a-zA-Z- '‘’]
。它真的帮了我很多。过去 2 天被卡住了。【参考方案2】:
我认为您正在寻找像 this: ^[a-zA-Z ']+$
这样的模式
但是,这很糟糕。元音变音、重音符号和大量其他不属于 ASCII 字母的字母呢?
更好的解决方案是允许使用任何语言的任何类型的字母。
为此,您可以使用 Unicode“字母”类别\pL
,例如^[\pL]+$
。
.. 或者您可以按照合理的建议一起放弃该规则。
【讨论】:
以上是关于正则表达式中无法识别撇号 (')的主要内容,如果未能解决你的问题,请参考以下文章
R 正则表达式替换除句子标记、撇号和连字符以外的所有标点符号
使用正则表达式剥离字符失败,使用带有变音符号,撇号,重音符号等的文字字符