正则表达式中无法识别撇号 (')

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]+$。 .. 或者您可以按照合理的建议一起放弃该规则。

【讨论】:

以上是关于正则表达式中无法识别撇号 (')的主要内容,如果未能解决你的问题,请参考以下文章

Java正则表达式转义撇号[重复]

R 正则表达式替换除句子标记、撇号和连字符以外的所有标点符号

使用正则表达式剥离字符失败,使用带有变音符号,撇号,重音符号等的文字字符

正则表达式用破折号、空格破折号、点空间、点和带有空字符串的撇号替换空格

mysql正则表达式无法识别d

用于捕获组的正则表达式无法识别