在iOS開發(fā)中议纯,經(jīng)常有用到對輸入的字符串進(jìn)行判斷∈眉蓿總結(jié)如下意鲸。
(1)有效的電話號碼
- (BOOL) isValidMobileNumber {
NSString* const MOBILE = @"^1(3|4|5|7|8)\\d{9}$";
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
return [predicate evaluateWithObject:self];
}
(2)有效的驗證碼(根據(jù)自家的驗證碼位數(shù)進(jìn)行修改)
- (BOOL) isValidVerifyCode{
NSString *pattern = @"^[0-9]{4}";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
return [predicate evaluateWithObject:self];
}
(3)有效的真實姓名
- (BOOL) isValidRealName{
NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{2,8}$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
return [predicate evaluateWithObject:self];
}
(4)是否只有中文
- (BOOL) isOnlyChinese{
NSString * chineseTest=@"^[\u4e00-\u9fa5]{0,}$";
NSPredicate*chinesePredicate=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",chineseTest];
return [chinesePredicate evaluateWithObject:self];
}
(5)有效的銀行卡號
- (BOOL) isValidBankCardNumber {
NSString* const BANKCARD = @"^(\\d{16}|\\d{19})$";
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", BANKCARD];
return [predicate evaluateWithObject:self];
}
(6)有效的郵箱
- (BOOL) isValidEmail{
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:self];
}
(7)昵稱驗證
- (BOOL) validateNickName{
NSString *userNameRegex = @"^[A-Za-z0-9\u4e00-\u9fa5]{1,24}+$";
NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
return [userNamePredicate evaluateWithObject:self];
}
(8)有效的字母數(shù)字密碼
- (BOOL) isValidAlphaNumberPassword{
NSString *regex = @"^(?!\\d+$|[a-zA-Z]+$)\\w{6,12}$";
NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [identityCardPredicate evaluateWithObject:self];
}
(9)檢測有效身份證 (15位)
- (BOOL) isValidIdentifyFifteen{
NSString * identifyTest=@"^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
NSPredicate*identifyPredicate=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",identifyTest];
return [identifyPredicate evaluateWithObject:self];
}
(10)檢測有效身份證(18位)
- (BOOL) isValidIdentifyEighteen{
NSString * identifyTest=@"^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$";
NSPredicate*identifyPredicate=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",identifyTest];
return [identifyPredicate evaluateWithObject:self];
}
(11)限制只能輸入數(shù)字
- (BOOL) isOnlyNumber{
BOOL res = YES;
NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
int i = 0;
while (i < self.length) {
NSString * string = [self substringWithRange:NSMakeRange(i, 1)];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length == 0) {
res = NO;
break;
}
i++;
}
return res;
}
(19)限制只能輸入數(shù)字和小數(shù)點且小數(shù)點后保留兩位
- (BOOL) isOnlyNumberCashRange:(NSRange)range{
NSString * cash= (NSString*)self;
NSScanner *scanner = [NSScanner scannerWithString:cash];
NSCharacterSet *numbers;
NSRange pointRange = [self rangeOfString:@"."];
if ( (pointRange.length > 0) && (pointRange.location < range.location || pointRange.location > range.location + range.length) )
{
numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
}
else
{
numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
}
if ( [self isEqualToString:@""] && [cash isEqualToString:@"."] )
{
return NO;
}
if (range.location == 1) {
if ([cash isEqualToString:@"."]) {
return NO;
}
}
short remain = 2; //默認(rèn)保留2位小數(shù)
NSString *tempStr = [self stringByAppendingString:cash];
NSUInteger strlen = [tempStr length];
if(pointRange.length > 0 && pointRange.location > 0){ //判斷輸入框內(nèi)是否含有“.”。
if([cash isEqualToString:@"."]){ //當(dāng)輸入框內(nèi)已經(jīng)含有“.”時算色,如果再輸入“.”則被視為無效。
return NO;
}
if(strlen > 0 && (strlen - pointRange.location) > remain+1){ //當(dāng)輸入框內(nèi)已經(jīng)含有“.”螟够,當(dāng)字符串長度減去小數(shù)點前面的字符串長度大于需要要保留的小數(shù)點位數(shù)灾梦,則視當(dāng)次輸入無效。
return NO;
}
}else{
if (range.location>4) {
if (![cash isEqualToString:@"."]) {
return NO;
}
}
}
NSRange zeroRange = [self rangeOfString:@"0"];
if(zeroRange.length == 1 && zeroRange.location == 0){ //判斷輸入框第一個字符是否為“0”
if(![cash isEqualToString:@"0"] && ![cash isEqualToString:@"."] && [self length] == 1)
{ //當(dāng)輸入框只有一個字符并且字符為“0”時妓笙,再輸入不為“0”或者“.”的字符時若河,則將此輸入替換輸入框的這唯一字符。
return NO;
}
else
{
if(pointRange.length == 0 && pointRange.location > 0){ //當(dāng)輸入框第一個字符為“0”時寞宫,并且沒有“.”字符時萧福,如果當(dāng)此輸入的字符為“0”,則視當(dāng)此輸入無效辈赋。
if([cash isEqualToString:@"0"]){
return NO;
}
}
}
}
NSString *buffer;
if ( ![scanner scanCharactersFromSet:numbers intoString:&buffer] && ([cash length] != 0) )
{
return NO;
}
return YES;
}