iOS开发 一些常用的正则表达式工具类

时间:2023-02-18 21:01:38

iOS开发 一些常用的正则表达式工具类


什么是正则表达式?

正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。它可以迅速地用极简单的方式达到字符串的复杂控制。

正则表达式的语法:

iOS开发 一些常用的正则表达式工具类

iOS中正则表达式与NSPredicate连用, 看一个过滤纯数字的例子:

- (BOOL)checkNumber:(NSString *) number{
    NSString* number=@"^[0-9]+$";
    NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number];
    return [numberPre evaluateWithObject:textString];
}

其中下述语句就是一个正则表达式:
@"^[0-9]+$"

封装的CheckDataTool类: .h文件
//
// CheckDataTool.h
// RegularExpression
//
// Created by LiCheng on 16/6/12.
// Copyright © 2016年 Li_Cheng. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface CheckDataTool : NSObject

/** * 邮箱验证 * * @param email 邮箱 * * @return YES:正确 NO:失败 */
+ (BOOL) checkForEmail:(NSString *)email;

/** * 手机号验证 * * @param phone 手机号 * * @return YES:正确 NO:失败 */
+(BOOL)checkForMobilePhoneNo:(NSString *)mobilePhone;

/** * 电话号验证 * * @param phone 电话号 * * @return 结果 */
+(BOOL)checkForPhoneNo:(NSString *)phone;

/** * 身份证号验证(15位 或 18位) * * @param idCard 身份证号 * * @return YES:正确 NO:失败 */
+(BOOL)checkForIdCard:(NSString *)idCard;

/** * 密码验证 * * @param shortest 最短长度 * @param longest 最长长度 * @param pwd 密码 * * @return 结果 */
+(BOOL)checkForPasswordWithShortest:(NSString *)shortest longest:(NSString *)longest password:(NSString *)pwd;


/** * 由数字和26个英文字母组成的字符串 * * @param idCard 数据 * * @return 结果 */
+ (BOOL) checkForNumberAndCase:(NSString *)data;


/** * 校验只能输入26位小写字母 * * @param 数据 * * @return 结果 */
+ (BOOL) checkForLowerCase:(NSString *)data;

/** * 校验只能输入26位大写字母 * * @param data 数据 * * @return 结果 */
+ (BOOL) checkForUpperCase:(NSString *)data;

/** * 校验只能输入由26个小写英文字母组成的字符串 * * @param data 字符串 * * @return 结果 */
+ (BOOL) checkForLowerAndUpperCase:(NSString *)data;

/** * 是否含有特殊字符(%&’,;=?$\等) * * @param data 数据 * * @return 结果 */
+ (BOOL) checkForSpecialChar:(NSString *)data;


/** * 校验只能输入数字 * * @param number 数字 * * @return 结果 */
+ (BOOL) checkForNumber:(NSString *)number;

/** * 校验只能输入n位的数字 * * @param length n位 * @param number 数字 * * @return 结果 */
+ (BOOL) checkForNumberWithLength:(NSString *)length number:(NSString *)number;

@end

.m文件

//
// CheckDataTool.m
// RegularExpression
//
// Created by LiCheng on 16/6/12.
// Copyright © 2016年 Li_Cheng. All rights reserved.
//

#import "CheckDataTool.h"

@implementation CheckDataTool

#pragma mark - 邮箱校验
+(BOOL)checkForEmail:(NSString *)email{
    
    NSString *regEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    return [self baseCheckForRegEx:regEx data:email];
}

#pragma mark - 验证手机号
+(BOOL)checkForMobilePhoneNo:(NSString *)mobilePhone{
    
    NSString *regEx = @"^1[3|4|5|7|8][0-9]\\d{8}$";
    return [self baseCheckForRegEx:regEx data:mobilePhone];
}
#pragma mark - 验证电话号
+(BOOL)checkForPhoneNo:(NSString *)phone{
    NSString *regEx = @"^(\\d{3,4}-)\\d{7,8}$";
    return [self baseCheckForRegEx:regEx data:phone];
}

#pragma mark - 身份证号验证
+ (BOOL) checkForIdCard:(NSString *)idCard{
    
    NSString *regEx = @"(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)";
    return [self baseCheckForRegEx:regEx data:idCard];
}
#pragma mark - 密码校验
+(BOOL)checkForPasswordWithShortest:(NSInteger)shortest longest:(NSInteger)longest password:(NSString *)pwd{
    NSString *regEx =[NSString stringWithFormat:@"^[a-zA-Z0-9]{%ld,%ld}+$", shortest, longest];
    return [self baseCheckForRegEx:regEx data:pwd];
}

//----------------------------------------------------------------------

#pragma mark - 由数字和26个英文字母组成的字符串
+ (BOOL) checkForNumberAndCase:(NSString *)data{
    NSString *regEx = @"^[A-Za-z0-9]+$";
    return [self baseCheckForRegEx:regEx data:data];
}

#pragma mark - 小写字母
+(BOOL)checkForLowerCase:(NSString *)data{
    NSString *regEx = @"^[a-z]+$";
    return [self baseCheckForRegEx:regEx data:data];
}

#pragma mark - 大写字母
+(BOOL)checkForUpperCase:(NSString *)data{
    NSString *regEx = @"^[A-Z]+$";
    return [self baseCheckForRegEx:regEx data:data];
}
#pragma mark - 26位英文字母
+(BOOL)checkForLowerAndUpperCase:(NSString *)data{
    NSString *regEx = @"^[A-Za-z]+$";
    return [self baseCheckForRegEx:regEx data:data];
}

#pragma mark - 特殊字符
+ (BOOL) checkForSpecialChar:(NSString *)data{
    NSString *regEx = @"[^%&',;=?$\x22]+";
    return [self baseCheckForRegEx:regEx data:data];
}

#pragma mark - 只能输入数字
+ (BOOL) checkForNumber:(NSString *)number{
    NSString *regEx = @"^[0-9]*$";
    return [self baseCheckForRegEx:regEx data:number];
}

#pragma mark - 校验只能输入n位的数字
+ (BOOL) checkForNumberWithLength:(NSString *)length number:(NSString *)number{
    NSString *regEx = [NSString stringWithFormat:@"^\\d{%@}$", length];
    return [self baseCheckForRegEx:regEx data:number];
}


#pragma mark - 私有方法
/** * 基本的验证方法 * * @param regEx 校验格式 * @param data 要校验的数据 * * @return YES:成功 NO:失败 */
+(BOOL)baseCheckForRegEx:(NSString *)regEx data:(NSString *)data{
    
    NSPredicate *card = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx];
    
    if (([card evaluateWithObject:data])) {
        return YES;
    }
    return NO;
}

@end