iOS判斷輸入的字符串是否是純數字


主要用於判斷輸入到TextField的內容是不是數字,比如需要輸入電話號碼的時候。

網上查看了一些資料,一般都是通過協議。

以下內容來自:http://www.2cto.com/kf/201404/291718.html

今天項目中有個文本框需要只可以輸入數字的需求,首先在.xib中將UITextField的Keyboard設置為Number Pad,但是使用時鍵盤會切回別的鍵盤無法對內容進行校驗。通過神奇的百度我知道了通過以下方法可以解決這樣的問題:

首先讓.xib的viewController實現UITextFieldDelegate然后和想要校驗的控件關聯。

然后將下列代碼粘貼到類中即可。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return [self validateNumber:string];
}
 
- (BOOL)validateNumber:(NSString*)number {
    BOOL res = YES;
    NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    int i = 0;
    while (i < number.length) {
        NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
        NSRange range = [string rangeOfCharacterFromSet:tmpSet];
        if (range.length == 0) {
            res = NO;
            break;
        }
        i++;
    }
    return res;
}

還有一種方式,以下這種方式我還沒有試過但是我找到了就分享出來吧:

1.定義常量以備使用

#define NUMBERS @"0123456789"

2.進行以下操作

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
        NSCharacterSet*cs;
        cs = [[NSCharacterSetcharacterSetWithCharactersInString:NUMBERS] invertedSet];
        NSString*filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        BOOLbasicTest = [string isEqualToString:filtered];
        if(!basicTest) {
             
            UIAlertView* alert = [[UIAlertViewalloc] initWithTitle:@"提示"
                                                            message:@"請輸入數字"
                                                           delegate:nil
                                                  cancelButtonTitle:@"確定"
                                                  otherButtonTitles:nil];
             
            [alert show];
            returnNO;
             
        }
    returnYES;
}

 

后面的方法可以判斷任意字符串是不是純數字

參考:http://blog.csdn.net/sike2008/article/details/8315202

1用正則表達式 

//是否是純數字

+ (BOOL)isNumText:(NSString *)str{

    NSString * regex        = @"(/^[0-9]*$/)";

    NSPredicate * pred      = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    BOOL isMatch            = [pred evaluateWithObject:str];

    if (isMatch) {

        return YES;

    }else{

        return NO;

    }

}

 

 
具體正則對不對  還需要大家來看以下 
 
 
第二種 系統源生的 
我推薦第二種 
 
- (NSString *) trimming {

    

    return [self stringByTrimmingCharactersInSet: [NSCharacterSetwhitespaceCharacterSet]];

}

 
    //判斷是不是純數字

    [NSCharacterSet decimalDigitCharacterSet];

    if ([[textField.text stringByTrimmingCharactersInSet: [NSCharacterSetdecimalDigitCharacterSet]]trimming].length >0) {

        DLog(@"不是純數字");

    }else{

        DLog(@"純數字!");

    }

 

說說自己的方法

我是參考的最后一種方式,把判斷寫在一個分類里面,方便要用的時候隨時調用

經測試,完美可用

以下是分類中的代碼

@implementation NSString (Number)

+ (BOOL)isNumber:(NSString *)string{
    
    //判斷是不是純數字
    [NSCharacterSet decimalDigitCharacterSet];
    if ([[string stringByTrimmingCharactersInSet: [NSCharacterSet decimalDigitCharacterSet]] trimming].length >0) {
        return NO;
    }else{
        NSLog(@"純數字!");
    }
    
    return YES;
}

- (NSString *) trimming {
    
    return [self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
}

然后就是在用的時候,導入分類的頭文件,調用方法就可以了

比如說:

if (![NSString isNumber:self.phoneTextField.text]) {
        [self showAlertWithTittle:@"提示" andMessage:@"電話只能是純數字" andOKTittle:@"知道了"];
    }

 

彈出提示框因為用得比較多,所以把簡單的提示框單獨寫了一個方法

/**
 *  顯示彈出提示框
 *
 *  @param tittle       標題
 *  @param message      提示消息
 *  @param OKTittle     確定按鈕標題
 */
- (void)showAlertWithTittle:(NSString *)tittle andMessage:(NSString *)message  andOKTittle:(NSString *)OKTittle{
    
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:tittle message:message preferredStyle:UIAlertControllerStyleAlert];
    //    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelTittle style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    //        NSLog(@"點擊了取消按鈕");
    //    }];
    UIAlertAction *OKAction = [UIAlertAction actionWithTitle:OKTittle style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
    }];
    
    
    //    [alertController addAction:cancelAction];
    [alertController addAction:OKAction];
    
    [self presentViewController:alertController animated:YES completion:nil];
    
}

其實,后面發現,寫在各個.m文件中並不是很好,因為很多Controller都可能要用到這個方法,有興趣的朋友可以試試把這個方法封裝到一個類里面。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM