通过RegEx的表情符号数字

时间:2014-09-18 05:10:35

标签: ios objective-c regex

奇怪的问题。我有一个正则表达式来限制可以输入文本字段的内容。使用的模式如下:

NSString *pattern = @"[0-9a-zA-Z'\\-\n ]";

这很有效,除了在玩表情符号键盘时我遇到了一个案例,数字0-9的表情符号图形与上面的正则表达式相匹配。包括单个字母在内的其他表情符号字符都没有通过测试。这些图形表示数字1被一个盒子包围,就像它在按钮上一样。如何防止传递上述模式?

NSString *pattern = @"[0-9a-zA-Z'\\-\n ]";
NSError *error;
NSUInteger match = 1;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: pattern options:0 error:&error];

if ([string length]>0) match = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, 1)];

if (match != 1) return NO;

2 个答案:

答案 0 :(得分:3)

表情符号是Unicode组合代码点(用于封闭"键帽"形状)和普通数字的组合。 http://www.fileformat.info/info/unicode/char/20e3/index.htm

如果要排除可与数字组合的Unicode字符,则需要查找许多可能需要查找的组合标记(例如重音符号)。或者您可以验证您的字符串是否只包含您关注的范围内的字符。

答案 1 :(得分:0)

以下是我如何解决这个问题。正如我在评论中提到的,我对这种方法并不感到兴奋,因为我确信有一种正则表达式可以解决。如果一个人还没有使用正则表达式,我认为这很好,但是因为我认为用正则表达式完全解决这个问题会更清楚。如果某人确实有正则表达式的答案可以与OP的正则表达式结合使用,请点击进入。

if (![string canBeConvertedToEncoding:NSASCIIStringEncoding]) match = 0; 
else
   if ([string length]>0) match = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, 1)];