分享一個iOS輸入框特殊限制的代碼 UITextField (Validation)

來源:互聯網
上載者:User

分享一個iOS輸入框特殊限制的代碼 UITextField (Validation)

//個人總結,歡迎新增或修改
#import typedef enum{    VALIDATION_TYPE_NUM_VALIDATED = 0,//數字    VALIDATION_TYPE_ID_CARD_VALIDATED = 1,//身份證    VALIDATION_TYPE_MOBILE_PHONE_VALIDATED = 2,//手機號    VALIDATION_TYPE_EMAIL_VALIDATED = 3,//email} ValidationType;@interface UITextField (Validation)-(void)setValidationType:(ValidationType)validationType;-(NSString *)errorMessage;- (void)limitTextLength:(int)length;@end



#import "UITextField+Validation.h"#import #import static NSString *kLimitTextMaxLengthKey = @"kLimitTextMaxLengthKey";static NSString *kLimitTextErrorMessageKey = @"kLimitTextErrorMessageKey";@implementation UITextField (Validation)-(void)resetTextfieldValidation{    objc_setAssociatedObject(self, (__bridge  const void *)(kLimitTextErrorMessageKey), nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(void)setValidationType:(ValidationType)validationType{    [self addTarget:self action:@selector(resetTextfieldValidation) forControlEvents:UIControlEventEditingDidBegin];    self.keyboardType = UIKeyboardTypeDefault;        if (validationType == VALIDATION_TYPE_NUM_VALIDATED) {        [self limitTextOnlyNumber];        self.keyboardType = UIKeyboardTypeNumberPad;    }else if(validationType == VALIDATION_TYPE_EMAIL_VALIDATED){        [self limitTextOnlyEmail];        self.keyboardType = UIKeyboardTypeEmailAddress;    }else if(validationType == VALIDATION_TYPE_MOBILE_PHONE_VALIDATED){        [self limitTextOnlyPhone];        self.keyboardType = UIKeyboardTypePhonePad;    }else if(validationType == VALIDATION_TYPE_ID_CARD_VALIDATED){        [self limitTextOnlyIDCard];    }        [self limitTextNoSpace];}-(NSString *)errorMessage{    NSString *str= objc_getAssociatedObject(self, (__bridge  const void *)(kLimitTextErrorMessageKey));    if (str) {        return str;    }    return nil;}#pragma mark - Limit Text Length- (void)limitTextLength:(int)length{    objc_setAssociatedObject(self, (__bridge  const void *)(kLimitTextMaxLengthKey), [NSNumber numberWithInt:length], OBJC_ASSOCIATION_RETAIN_NONATOMIC);    [self addTarget:self action:@selector(textFieldTextLengthLimit:) forControlEvents:UIControlEventEditingChanged];}- (void)textFieldTextLengthLimit:(id)sender{    NSNumber *maxLengthNumber = objc_getAssociatedObject(self, (__bridge  const void *)(kLimitTextMaxLengthKey));    int maxLength = [maxLengthNumber intValue];    if(self.text.length > maxLength){        self.text = [self.text substringToIndex:maxLength];    }}#pragma mark - Limit Text Only Number-(void)limitTextOnlyNumber{    [self addTarget:self action:@selector(textFieldTextNumberLimit:) forControlEvents:UIControlEventEditingChanged];}- (void)textFieldTextNumberLimit:(id)sender{    if (!self.text.length) {        [self resetTextfieldValidation];        return;    }    NSString * regexNum = @"^\\d*$";    NSPredicate *regexNumPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regexNum];    if ([regexNumPredicate evaluateWithObject:self.text]==YES) {    }else{        self.text=[self.text substringFromIndex:self.text.length];    }}#pragma mark - Limit Text Only Phone-(void)limitTextOnlyPhone{    [self addTarget:self action:@selector(textFieldTextPhoneLimit:) forControlEvents:UIControlEventEditingDidEnd];    [self limitTextLength:11];    [self limitTextOnlyNumber];}- (void)textFieldTextPhoneLimit:(id)sender{    if (!self.text.length) {        [self resetTextfieldValidation];        return;    }    //    NSString * regex=@"^((13[0-9])|(147)|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";    NSString * regex=@"^1\\d{10}$";    NSPredicate *regexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];    if ([regexPredicate evaluateWithObject:self.text]==YES) {        self.text=[self.text substringToIndex:self.text.length];        [self resetTextfieldValidation];    }else{        self.text=[self.text substringToIndex:self.text.length];        objc_setAssociatedObject(self, (__bridge  const void *)(kLimitTextErrorMessageKey), @"請輸入正確的手機號碼", OBJC_ASSOCIATION_RETAIN_NONATOMIC);    }}#pragma mark - Limit Text For Email-(void)limitTextOnlyEmail{    [self addTarget:self action:@selector(textFieldTextForEmailLimit:) forControlEvents:UIControlEventEditingDidEnd];}- (void)textFieldTextForEmailLimit:(id)sender{    if (!self.text.length) {        [self resetTextfieldValidation];        return;    }    NSString *regex=@"^[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$";    NSPredicate *regexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];    if ([regexPredicate evaluateWithObject:self.text]==YES) {        [self resetTextfieldValidation];    }else{        objc_setAssociatedObject(self, (__bridge  const void *)(kLimitTextErrorMessageKey), @"郵箱格式錯誤", OBJC_ASSOCIATION_RETAIN_NONATOMIC);    }}#pragma mark - Limit Text For IDCard-(void)limitTextOnlyIDCard{    [self addTarget:self action:@selector(textFieldTextForIDCardLimit:) forControlEvents:UIControlEventEditingDidEnd];    [self limitTextLength:18];}- (void)textFieldTextForIDCardLimit:(id)sender{    if (!self.text.length) {        [self resetTextfieldValidation];        return;    }    //NSString *regex=@"^(4\\d{12}(?:\\d{3})?)$";    NSString *regex=@"^([1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3})|([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 *regexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];    if ([regexPredicate evaluateWithObject:self.text]==YES) {        [self resetTextfieldValidation];    }else{        objc_setAssociatedObject(self, (__bridge  const void *)(kLimitTextErrorMessageKey), @"身份證格式錯誤", OBJC_ASSOCIATION_RETAIN_NONATOMIC);    }}#pragma mark - Limit Text NoSpace- (void)limitTextNoSpace{    [self addTarget:self action:@selector(textFieldTextNoSpaceLimit:) forControlEvents:UIControlEventEditingDidEnd];}- (void)textFieldTextNoSpaceLimit:(id)sender{    self.text = [self noSpaceString:self.text];}- (NSString *)noSpaceString:(NSString *)str{    if (str.length) {        return  [str stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];    }        return str;}@end


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.