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

Apostrophes (') is not recognised in regular expression

我想要一个可以包含

的名字的正则表达式

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];
}

我认为您正在寻找类似 this 的模式:^[a-zA-Z ']+$

然而,这很糟糕。变音符号、重音符和许多其他不属于 ASCII 字母表的字母呢?

更好的解决方案是允许来自任何语言的任何类型的字母。 为此,您可以使用 Unicode "letter" 类别 \p{L},例如^[\p{L}]+$。 .. 或者您可以完全放弃该规则 - 正如合理建议的那样。

我可以推荐^[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', space 或简单引用