IOS中NSPredicate和NSRegularExpression校驗正則表達式區(qū)別
在代碼開發(fā)過程中,我們經(jīng)常需要用來校驗郵箱、手機號等等,這個時候就需要用到正則表達式。在iOS開發(fā)中,能用來做正則校驗的有兩個 NSPredicate 和 NSRegularExpression 。
NSPredicate
NSPredicate 能用來簡單做正則校驗,但是它的問題是存在校驗不出來的情況。
//NSString+RegEx.h
#import <Foundation/Foundation.h>
@interface NSString (RegEx)
#pragma mark - NSPredicate
- (BOOL)mars_matchedByPrdicateToRegEx:(NSString *)regEx;
@end
//NSString+RegEx.m
#import "NSString+RegEx.h"
@implementation NSString (RegEx)
#pragma mark - NSPredicate
- (BOOL)mars_matchedByPrdicateToRegEx:(NSString *)regEx{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx];
return [predicate evaluateWithObject:self];
}
@end
NSRegularExpression (推薦)
NSRegularExpression 相對于 NSPredicate 功能就強大的多了,這也是iOS正則校驗的正統(tǒng)路子。
//NSString+RegEx.h
#import <Foundation/Foundation.h>
@interface NSString (RegEx)
#pragma mark - NSRegularExpression
//校驗是否匹配
- (BOOL)mars_matchedToRegEx:(NSString *)regEx;
//匹配到的第一個字符串
- (NSString *)mars_firstMatchToRegEx:(NSString *)regEx;
//所有匹配的字符串
- (NSArray *)mars_matchesToRegEx:(NSString *)regEx;
//替換匹配到的字符串
- (NSString *)mars_stringByReplaceMatchesToRegEx:(NSString *)regEx replaceString:(NSString *)replaceString;
@end
//NSString+RegEx.m
#import "NSString+RegEx.h"
@implementation NSString (RegEx)
#pragma mark - NSRegualrExpression
//校驗是否匹配
- (BOOL)mars_matchedToRegEx:(NSString *)regEx{
NSError *error;
NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regEx options:NSRegularExpressionCaseInsensitive error:&error];
NSUInteger number = [regularExpression numberOfMatchesInString:self options:0 range:NSMakeRange(0, self.length)];
return number != 0;
}
//匹配到的第一個字符串
- (NSString *)mars_firstMatchToRegEx:(NSString *)regEx{
NSError *error;
NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regEx options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *firstMatch = [regularExpression firstMatchInString:self options:0 range:NSMakeRange(0, self.length)];
if (firstMatch) {
NSString *result = [self substringWithRange:firstMatch.range];
return result;
}
return nil;
}
//所有匹配的字符串
- (NSArray *)mars_matchesToRegEx:(NSString *)regEx{
NSError *error;
NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regEx options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matchArray = [regularExpression matchesInString:self options:0 range:NSMakeRange(0, self.length)];
NSMutableArray *array = [NSMutableArray array];
if (matchArray.count != 0) {
for (NSTextCheckingResult *match in matchArray) {
NSString *result = [self substringWithRange:match.range];
[array addObject:result];
}
}
return array;
}
//替換匹配到的字符串
- (NSString *)mars_stringByReplaceMatchesToRegEx:(NSString *)regEx replaceString:(NSString *)replaceString{
NSError *error;
NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regEx options:NSRegularExpressionCaseInsensitive error:&error];
return [regularExpression stringByReplacingMatchesInString:self options:0 range:NSMakeRange(0, self.length) withTemplate:replaceString];
}
@end
最后我們看到,還是推薦大家使用NSRegularExpression來做正則的校驗,如果大家在學習中有更好的解決方法或者心得,可以在下方的留言區(qū)討論。
相關(guān)文章
iOS實現(xiàn)聯(lián)系人按照首字母進行排序的實例
下面小編就為大家分享一篇iOS實現(xiàn)聯(lián)系人按照首字母進行排序的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
詳解2016 cocoapods的安裝和使用以及版本升級遇到的問題
CocoaPods是一個負責管理iOS項目中第三方開源庫的工具。這篇文章主要介紹了2016 cocoapods的安裝和使用以及版本升級遇到的問題,有需要的可以了解一下。2016-12-12
IOS 貝塞爾曲線(UIBezierPath)屬性、方法整理
這篇文章主要介紹了IOS 貝塞爾曲線(UIBezierPath)屬性、方法的相關(guān)資料,這里整理了貝塞爾 曲線的基礎(chǔ)資料,對屬性及相應(yīng)的方法一一做了詳解,需要的朋友可以參考下2016-11-11

