主要用于判断输入到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:@""];
int i = ;
while (i < number.length) {
NSString * string = [number substringWithRange:NSMakeRange(i, )];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length == ) {
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 >) {

        DLog(@"不是纯数字");

    }else{

        DLog(@"纯数字!");

    }

说说自己的方法

我是参考的最后一种方式,把判断写在一个分类里面,方便要用的时候随时调用

经测试,完美可用

以下是分类中的代码

@implementation NSString (Number)

+ (BOOL)isNumber:(NSString *)string{

    //判断是不是纯数字
[NSCharacterSet decimalDigitCharacterSet];
if ([[string stringByTrimmingCharactersInSet: [NSCharacterSet decimalDigitCharacterSet]] trimming].length >) {
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都可能要用到这个方法,有兴趣的朋友可以试试把这个方法封装到一个类里面。

 

iOS判断输入的字符串是否是纯数字的更多相关文章

  1. C# 判断输入的字符串是否只包含数字和英文字母

    /// <summary> /// 判断输入的字符串是否只包含数字和英文字母 /// </summary> /// <param name="input&quo ...

  2. C# .NET 判断输入的字符串是否只包含数字和英文字母

    FROM :   https://www.cnblogs.com/ilookbo/p/4828722.html /// <summary> /// 判断输入的字符串是否只包含数字和英文字母 ...

  3. swift 判断输入的字符串是否为数字

    // 判断输入的字符串是否为数字,不含其它字符 func isPurnInt(string: String) -> Bool { let scan: Scanner = Scanner(stri ...

  4. Excel-判断一个文本字符串中是否包含数字! 判断一个文本字符串是否是纯汉字!

    0.判断一个文本字符串中是否包含数字!/判断一个文本字符串是否是纯汉字! 公式=IF(LENB(A1)=2*LEN(A1),"都是汉字","含有非汉字字符") ...

  5. asp.net检查验证字符串是否为纯数字方法小结

    原文  asp.net检查验证字符串是否为纯数字方法小结 在asp.net中验证字符串是不是为数字我们没有像php中那么多丰富的函数来直接使用,这里我整理了一些比较实例的验证字符串是否为纯数字方法代码 ...

  6. JAVA从字符串中提取纯数字

    /** * 从字符串中提取纯数字 * @param str * @return */ public static String getNumeric(String str) { String regE ...

  7. 输入一个字符串,内有数字和非数字字符。例如:a123x456 17960 302tab5876。将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。

    题目内容:输入一个字符串,内有数字和非数字字符.例如:a123x456 17960 302tab5876.将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1 ...

  8. Android EditText判断输入的字符串是否为数字(包含小数点)

    有时候项目需要获取EditText所输入的字符串为纯数字(含小数),一般情况下在xml中设置EditText的的属性(我是直接设置digits为数字和小数点,即digits="0123456 ...

  9. C# 用正则表达式判断字符串是否为纯数字

    Regex regex = new System.Text.RegularExpressions.Regex("^(-?[0-9]*[.]*[0-9]{0,3})$"); stri ...

随机推荐

  1. linux 下shell脚本执行多个命令的方法

    1.每个命令之间用;隔开说明:各命令的执行给果,不会影响其它命令的执行.换句话说,各个命令都会执行,但不保证每个命令都执行成功. 2.每个命令之间用&&隔开说明:若前面的命令执行成功, ...

  2. Robot Framework操作

    Robot Framework 介绍 RobotFramework是一款基于python的开源自动化测试框架,遵守Apache License 2.0协议,在此协议下所有人都可以免费开发和使用.因为R ...

  3. 【问题记录】LoadRunner 接口压测-json格式报文

    [问题起因] 前段时间,协助其他项目录制接口压测脚本,对方要求请求报文内容实现参数化. 请求方法如下: 直接在Parameter List中新增一个parameter, 将请求报文放入dat文件中.这 ...

  4. mount: wrong fs type

    # mount -t nfs -o nolock 192.168.1.84:/home/jason/filesys /mnt/nfsmount: wrong fs type, bad option, ...

  5. flask的路由配置,特殊装饰器

    1,flask中的路由 endpoint-url_for反向地址 endpoint默认是视图函数名endpoint="雪雪" methods 指定视图函数的请求方式,默认GET d ...

  6. hadoop第一个例子WordCount

    hadoop查看自己空间 http://127.0.0.1:50070/dfshealth.jsp import java.io.IOException; import java.util.Strin ...

  7. 浅谈cookie 和session 的区别

    具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cooki ...

  8. bzoj1486【HNOI2009】最小圈

    1486: [HNOI2009]最小圈 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1778  Solved: 827 [Submit][Statu ...

  9. mysql查询表的字符集

    mysql查询表的字符集 SHOW CREATE TABLE user;

  10. 【转】Android性能优化之GPU过度绘制与图形渲染优化

    标签: android / 优化 / 过度绘制 / 图形渲染优化 Android之GPU过度绘制与图形渲染优化 写在前面的话 本文主要对过度绘制和图形渲染做一个概念性的描述,和简单的优化措施. 如果你 ...