正則表達式

'''

在 iOS 中,我們使用 NSPredicate 的字符串比較功能來進行正則表達式處理,其比較關(guān)鍵字為:MATCHES

下面,列舉一個匹配6-15個由字母/數(shù)字組成的字符串的正則表達式,來看看 NSPredicate 的具體使用:

NSString * regex        = @"(^[A-Za-z0-9]{6,15}$)";  
NSPredicate * pred      = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];  
BOOL isMatch            = [pred evaluateWithObject:@"123456ABCde"];  

下面是一些常用的正則表達式
//郵箱

  • (BOOL) validateEmail:(NSString *)email
    {
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:email];
    }

//手機號碼驗證

+ (BOOL) validateMobile:(NSString *)mobile  
{  
    //手機號以13, 15,18開頭,八個 \d 數(shù)字字符  
    NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";  
    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];  
    return [phoneTest evaluateWithObject:mobile];  
}  

//車牌號驗證

+ (BOOL) validateCarNo:(NSString *)carNo  
{  
    NSString *carRegex = @"^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$";  
    NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",carRegex];  
    NSLog(@"carTest is %@",carTest);  
    return [carTest evaluateWithObject:carNo];  
}  

//車型

+ (BOOL) validateCarType:(NSString *)CarType  
{  
    NSString *CarTypeRegex = @"^[\u4E00-\u9FFF]+$";  
    NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",CarTypeRegex];  
    return [carTest evaluateWithObject:CarType];  
}  

//用戶名

+ (BOOL) validateUserName:(NSString *)name  
{  
    NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";  
    NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];  
    BOOL B = [userNamePredicate evaluateWithObject:name];  
    return B;  
}  

//密碼

+ (BOOL) validatePassword:(NSString *)passWord  
{  
    NSString *passWordRegex = @"^[a-zA-Z0-9]{6,20}+$";  
    NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passWordRegex];  
    return [passWordPredicate evaluateWithObject:passWord];  
}  

//昵稱

+ (BOOL) validateNickname:(NSString *)nickname  
{  
    NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";  
    NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];  
    return [passWordPredicate evaluateWithObject:nickname];  
}  

//身份證號

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

其實iOS中有三種方式來實現(xiàn)正則表達式的匹配?,F(xiàn)在將他們都記錄在這里:
1.利用NSPredicate(謂詞)匹配
例如匹配有效郵箱:
NSString *email = @“nijino_saki@163.com”;
NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValid = [predicate evaluateWithObject:email];
謂詞匹配比較靈活,但是需要有謂詞的相關(guān)知識。
2.利用rangeOfString:option:直接查找
NSString searchText = @"http:// Do any additional setup after loading the view, typically from a nib.";
NSRange range = [searchText rangeOfString:@"(?:[^,])
\." options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
NSLog(@"%@", [searchText substringWithRange:range]);
}
options中設(shè)定NSRegularExpressionSearch就是表示利用正則表達式匹配,會返回第一個匹配結(jié)果的位置。
3.使用正則表達式類
NSString *searchText = @"http:// Do any additional setup after loading the view, typically from a nib.";
NSError *error = NULL;
NSRegularExpression regex = [NSRegularExpression regularExpressionWithPattern:@"(?:[^,])\." options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range:NSMakeRange(0, [searchText length])];
if (result) {
NSLog(@"%@\n", [searchText substringWithRange:result.range]);
}
使用系統(tǒng)的正則表達式類(NSRegularExpression)會返回匹配的多個結(jié)果。
小結(jié):
第一種匹配需要學(xué)習NSPredicate的寫法,需要查閱蘋果相關(guān)技術(shù)文檔;如果只關(guān)心第一個匹配的結(jié)果,第二種匹配較為簡潔;如果需要匹配多個結(jié)果,同時匹配多次,第三種方式效率會更高。

'''

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 正則表達式 語法: 首先,特殊符號'^'和'$'。他們的作用是分別指出一個字符串的開始和結(jié)束。eg: “^one”...
    啷里個啷里個啷個里個啷閱讀 438評論 0 0
  • 一、一些特殊的正則表達式: 1、郵箱正則表達式 "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+...
    兔Hio閱讀 511評論 0 0
  • 一、什么是正則表達式 正則表達式,又稱正規(guī)表示法,是對字符串操作的一種邏輯公式。正則表達式可以檢測給定的字符串是否...
    Suger_森閱讀 396評論 0 0
  • 因為最近公司最近做項目一些手機格式,郵箱等等需要用到正則表達式驗證,因此記錄下來,方便以后查找. 正則表達式又稱正...
    小強七號閱讀 934評論 0 1
  • 來源:lady-奕奕的博客發(fā)布時間:2015-02-09 原文鏈接:http://www.admin10000.c...
    天地不仁以萬物為芻狗閱讀 536評論 0 0

友情鏈接更多精彩內(nèi)容