您的位置:首页 > 移动开发 > IOS开发

iOS开发_常用的正则表达式

2015-08-05 09:15 537 查看
实现正则表达式匹配的方式

常用的正则表达式

实现正则表达式匹配的方式

iOS中有三种方式可以实现正则表达式的匹配。

1.利用NSPredicate(谓词)匹配

例如匹配有效邮箱:

NSString *email = @"hellochina@gmail.com";
// 邮箱的正则表达式
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
// 创建并返回一个由 给定格式创建的新的字符串 形成的新谓词, 并解析结果.
NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
// 返回布尔值, 给定对象是否与接受者的条件匹配
NSLog(@"%d", [emailPredicate evaluateWithObject:email]);


使用 NSPredicate 的字符串评估功能来进行正则表达式处理,其比较关键字为:MATCHES。谓词匹配比较灵活,但是需要了解谓词的相关知识。

2.利用rangeOfString: options: 直接查找

NSString *email = @"hellochina@gmail.com";

NSRange range = [email rangeOfString:@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" options:NSRegularExpressionSearch];

// NSNotFound, 常量, 表明一项请求无法找到或者不存在的值。
if (range.location != NSNotFound) {
  // 在给定的范围内返回一个包含接受者特点的字符串对象
  NSLog(@"%@", [email substringWithRange:range]);
}


options中设定NSRegularExpressionSearch表示利用正则表达式匹配,会返回第一个匹配结果的位置。

3.使用NSRegularExpression(正则表达式类)匹配

NSString *email = @"hellochina@gmail.com";

NSRegularExpression *emailRegex = [NSRegularExpression regularExpressionWithPattern:@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" options:NSRegularExpressionCaseInsensitive error:nil];

NSTextCheckingResult *result = [emailRegex firstMatchInString:email options:0 range:NSMakeRange(0, [email length])];
if (result) {
  NSLog(@"%@", [email substringWithRange:result.range]);
}


使用系统的正则表达式类(NSRegularExpression)会返回匹配的多个结果。

小结:

第一种方式需要掌握NSPredicate的用法,需要查阅Apple API或者相关技术文档,如果只考虑第一个匹配的结果,第二种方式较为简单,如果需要匹配多个结果,同时匹配多次,第三种方式效率会更高。

常用的正则表达式

// 验证邮箱
+ (BOOL) verifyEmail:(NSString *)email
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailPredicate evaluateWithObject:email];
}

// 验证手机号码
+ (BOOL) verifyMobilePhone:(NSString *)mobilePhone
{
    NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
    NSPredicate *phonePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
    return [phonePredicate evaluateWithObject:mobilePhone];
}

// 验证用户名
+ (BOOL) verifyUserName:(NSString *)username
{
    NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";
    NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
    return [userNamePredicate evaluateWithObject:username];
}

// 验证密码
+ (BOOL) verifyPassword:(NSString *)password
{
    NSString *passwordRegex = @"^[a-zA-Z0-9]{6,20}+$";
    NSPredicate *passwordRegexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passwordRegex];
    return [passWordPredicate evaluateWithObject:password];
}

// 验证昵称
+ (BOOL) verifyNickname:(NSString *)nickname
{
    NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";
    NSPredicate *nicknamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
    return [nicknamePredicate evaluateWithObject:nickname];
}

// 验证***号
+ (BOOL) verifyIdentityCard:(NSString *)identityCard
{
    BOOL flag;
    if (identityCard.length <= 0) {
        flag = NO;
        return flag;
    }
    NSString *idRegex = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",idRegex];
    return [identityCardPredicate evaluateWithObject:identityCard];
}

// 验证字母和数字
+ (BOOL)verifyFigureAndLetter:(NSString *)string
{
    NSString *regular = @"^[A-Za-z0-9]+$";
    NSPredicate *numberAndLetterTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regular];
    return [numberAndLetterTest evaluateWithObject:string];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: