UITextField文字字数检验方法

邮箱校验

 NSString *emailRegex = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@._-%+-";
 NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
 if ([emailTest evaluateWithObject:textField.text]) {
       
 }else{
       
 }
或者
 NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
 NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
 if ([emailTest evaluateWithObject:textField.text]) {
       
 }else{
       
 }

中文检验

    NSString *regex =@"[\u4e00-\u9fa5]+";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];

只允许输入字母数字

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

中文输入时字数限制

添加监听
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange:) name:UITextFieldTextDidChangeNotification object:nil];
实现方法
- (void)textChange:(NSNotification*)noti {

// 拿到文本改变的 text field
UITextField *textField = (UITextField *)noti.object;

// 需要限制的长度
NSUInteger maxLength = 0;
if (textField == _companyTextField) {
    maxLength = 20;
    
}

if (textField == _jobTextField) {
    maxLength = 10;
}
if (maxLength == 0) return;

// text field 的内容
NSString *contentText = textField.text;

// 获取高亮内容的范围
UITextRange *selectedRange = [textField markedTextRange];
// 这行代码 可以认为是 获取高亮内容的长度
NSInteger markedTextLength = [textField offsetFromPosition:selectedRange.start toPosition:selectedRange.end];
// 没有高亮内容时,对已输入的文字进行操作
if (markedTextLength == 0) {
    // 如果 text field 的内容长度大于我们限制的内容长度
    if (contentText.length > maxLength) {
        // 截取从前面开始maxLength长度的字符串
        //            textField.text = [contentText substringToIndex:maxLength];
        // 此方法用于在字符串的一个range范围内,返回此range范围内完整的字符串的range
        NSRange rangeRange = [contentText rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)];
        textField.text = [contentText substringWithRange:rangeRange];
    }
}
}
移除监听
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

字数检验

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

NSMutableString *newtext = [NSMutableString stringWithString:textField.text];
[newtext replaceCharactersInRange:range withString:string];


/*
if (textField == _companyTextField) {
    if ([newtext length] > 20) {
        EPShowSuccess(@"公司名称不能超过20字");
        return NO;
    }
}

if (textField == _jobTextField) {
    if ([newtext length] > 10) {
        EPShowSuccess(@"职位名称不能超过10字");
        return NO;
    }
}

 */
return YES;
}

谓词校验

NSPredicate使用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 有时我们需要在一大段长文本中过滤出我们需要的字段,或者检验该文本是否符合要求(该文本是否是邮箱,链接,电话号...
    進无尽阅读 993评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 一开始,我以为这是一个属性设置问题或者是一个类似helloworld的函数,但是最后发现,这呀的是一个不小的坑。 ...
    秋醴泉阅读 2,914评论 7 8
  • 面试题参考1 : 面试题[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios阅读 1,758评论 0 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,447评论 0 9