具有良好字符的iOS正则表达式



在我的应用程序中,我只想接受仅由以下字符组成的NSStrings:

  • a - z
  • 0 - 9
  • a - z
  • space (dec: 32)

识别它的NSRegularExpression是什么?

提前感谢!

真诚,Zoli

你可以这样做:

-(BOOL) NSStringIsValid:(NSString *)checkString
{
   NSString *stricterFilterString = @"[A-Z0-9a-z ]*";
   NSPredicate *stringTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stricterFilterString];
   return [stringTest evaluateWithObject:checkString];
}

如果有效则返回YES,否则返回NO。

希望对你有帮助。

NSRegularExpression *regex =
    [NSRegularExpression regularExpressionWithPattern:@"[a-zA-Z0-9 ]*"
                                              options:...
                                                error:...];

如果至少需要一个字符,请使用+而不是*

我从未在iOS上使用过正则表达式,但根据文档,以下应该可以工作

[a-z0-9A-Z] +

根据你方提供的细节:

只接受由以下字符组成的nsstring:

我想让你试试这个regex:

^[a-z\d\s]*$

它涉及^(确保从字符串开始匹配)和$(确保匹配到字符串结束)

查看下面的代码片段:

NSString *sample = @"df$hjkds hfkshf 9397 AZZ";//@"dfhjkds hfkshf 9397 AZZ";
NSError  *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-z\d\s]*$"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
NSArray *matches = [regex matchesInString:sample
                                  options:NSMatchingReportProgress
                                    range:NSMakeRange(0, [sample length])];
// Print matches (if any) -- Optional
for (NSTextCheckingResult *match in matches)
    NSLog(@"%@",[sample substringWithRange:match.range]);
// Acknowledge if no matches found -- Optional
if([matches count] == 0)
    NSLog(@"No matches found");

请注意,在option中使用NSRegularExpressionCaseInsensitive不会增加匹配大写字母(A-Z)的开销。

希望有帮助!

最新更新