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)
Проверьте длину. Если он слишком длинный, верните 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;
}
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
}
-(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;
}
}
BOOL
является либо YES
, либо NO
. И гораздо эффективнее проверять длину перед проверкой текста на регулярное выражение. Нет смысла оценивать дорогой предикат, если строка слишком длинная.
– rmaddy
13 July 2018 в 06:04