Предел UITextfield без специальных символов ios Цель c

from sqlalchemy.orm import class_mapper

def asdict(obj):
    return dict((col.name, getattr(obj, col.name))
                for col in class_mapper(obj.__class__).mapped_table.c)
0
задан Rakesha Shastri 13 July 2018 в 05:11
поделиться

3 ответа

Проверьте длину. Если он слишком длинный, верните NO. В противном случае проверьте правильность символов.

Ваш код для проверки действительных символов очень неэффективен.

Следующий код - лучший способ справиться с вашим случаем:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = textField.text.length + string.length - range.length;
    if (newLength > limitPassportNumber) {
        return NO; // too long
    }

    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
    NSRange badRange = [string rangeOfCharacterFromSet:cs];

    return badRange.location == NSNotFound;
}
Следующий код - лучший способ обработать ваш случай:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = textField.text.length + string.length - range.length;
    if (newLength > limitPassportNumber) {
        return NO; // too long
    }

    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
    NSRange badRange = [string rangeOfCharacterFromSet:cs];

    return badRange.location == NSNotFound;
}
1
ответ дан rmaddy 17 August 2018 в 13:42
поделиться
  • 1
    Удивительно, спасибо, что он работал гладко. – Adeel Ilyas 13 July 2018 в 06:53
NSString *str = @"[~!@#$%^&*()_+-]";

NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", str];

if([[str evaluateWithObject:textfield.text]== YES] && [textfield.text length]<20){

  // Do Something
}
else{

  //Textfield has a special character or the text is greater than 20
}
-1
ответ дан Happily Hemu 17 August 2018 в 13:42
поделиться
  • 1
    Это проверяет неправильную длину. emailTest никогда не используется. – rmaddy 13 July 2018 в 05:42
-(BOOL)isValidString:(NSString *)string{
    NSString *regex = @"[A-Z0-9a-z]*";
    NSPredicate *regTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if ([regTest evaluateWithObject:string]) {
        return YES;
    }
    return NO;
}

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if ([string length] == 0)
        return YES;
    if ([string length] > 0 && [string length] <=20) {
        NSString *newString = [textField text];
        newString = [newString stringByReplacingCharactersInRange:range withString:string];

        return [self isValidString:newString];
    } else {
        return NO;
    }
}
0
ответ дан Yagnesh Dobariya 17 August 2018 в 13:42
поделиться
  • 1
    Объект-C BOOL является либо YES, либо NO. И гораздо эффективнее проверять длину перед проверкой текста на регулярное выражение. Нет смысла оценивать дорогой предикат, если строка слишком длинная. – rmaddy 13 July 2018 в 06:04
  • 2
    @rmaddy, Обновленный ответ. Спасибо, что сделал меня правильно. Очень ценю. – Yagnesh Dobariya 13 July 2018 в 09:17
Другие вопросы по тегам:

Похожие вопросы: