主要用于判断输入到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. JAVA_the user operation is waiting怎么办

    彻底解决 MyEclipse出现the user operation is waiting的问题   2011-05-31 10:32:30|  分类: 软件编程 |  标签:java  myecli ...

  2. Redis 入门指南

    就是DBIdx

  3. js 时钟特效

      时钟特效 CreateTime--2018年2月24日15:11:23 Author:Marydon 实现方式:都是基于HTML5的canvas标签实现的 款式一 借助jQuery插件实现 < ...

  4. C#调用国家气象局天气预报接口

    原文:C#调用国家气象局天气预报接口 一.需求 最近,刚好项目中有天气预报查询功能的需求,要求录入城市名称,获取该城市今日天气信息及相关气象生活辅助信息等. 例如:查询北京市天气 结果为: 今日北京天 ...

  5. ecshop广告宽度值必须在1到1024之间的解决方法

    ecshop加广告出现广告位的宽度值必须在1到1024之间的解决方法,这个问题是今天刚刚发现的,我就郁闷了,如今1024宽度的广告能做什么.你看看京东,天猫,非常多都是大型的横幅广告,这点ecshop ...

  6. 李洪强iOS开发之性能优化技巧

    李洪强iOS开发之性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view ...

  7. MySql InnoDb还原工具

    通过任意文件下载找到了mysql的备份,表类型是独享式innodb,由一个frm文件和一个ibd文件组成. 本以为直接复制到本地的mysql数据目录中即可恢复数据,但在查询时却发现并不如所愿: mys ...

  8. input from 表单提交 使用 属性 disabled=&quot;disabled&quot; 后台接收不到name=&quot;username&quot;的值

    input from 表单提交 使用 属性 disabled="disabled" 后台接收不到name="username"的值

  9. 在webkit中如何避免触发layout(重排)

    很多web开发者都已经意识到,在脚本执行中,DOM操作的用时可能比js本身执行时间要长很多,其中潜在的消耗基本上是由于触发了layout(即重排reflow:由DOM树构建为Render渲染树的过程) ...

  10. 导入别人的Android项目,提示 /Libs/gen already exists but is not a source folder. Convert to a source folder or rename it

    解决方法: 遇到这个问题的解决方法: 1. 右键点击工程,选择 "Properties" 2. 选择左边的 "Java Build Path" 3. 打开 &q ...