Ios text字段。输入的文本应具有特定格式
我有一个Ios text字段。输入的文本应具有特定格式,ios,objective-c,uitextfielddelegate,Ios,Objective C,Uitextfielddelegate,我有一个textfield,我希望文本以以下格式输入: aa#####1234 我知道这应该在shouldChangeCharactersInRange委托的文本字段方法中完成。但是我不知道如何在每个字符上实现条件。请给出您的建议。提前感谢 在UITextField上创建类别,并根据需要添加此方法写入条件。下面是电子邮件id的示例: - (BOOL)validateRegEx:(NSString*)regexString { NSError *error = NULL;
textfield
,我希望文本以以下格式输入:
aa#####1234
我知道这应该在
shouldChangeCharactersInRange
委托的文本字段
方法中完成。但是我不知道如何在每个字符上实现条件。请给出您的建议。提前感谢 在UITextField上创建类别,并根据需要添加此方法写入条件。下面是电子邮件id的示例:
- (BOOL)validateRegEx:(NSString*)regexString
{
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString
options:NSRegularExpressionCaseInsensitive
error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:self.text
options:0
range:NSMakeRange(0, [self.text length])];
return numberOfMatches > 0;
}
试试这个
-(BOOL)checkString:(NSString *)str{
NSString *regex1 = @"^[a-bA-B0-9]"; // chabge regex as per your needs
NSPredicate *test1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1];
return [test1 evaluateWithObject:str] ;
}
有助于验证您的需求的表达式可能是:
^[a-z]{2}\s\d{4}\s\d{4}$
在这里:
-显示字符串的开头^
显示a-z之间的任何字符正好2次[a-z]{2}
-一次显示空白字符李>\s
-显示0-9之间的任何数字,正好4次李>\d{4}
-显示字符串的结尾$
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSError *error = NULL;
NSRegularExpression *regex = nil;
NSMutableString *combinedText = [textField.text mutableCopy];
[combinedText replaceCharactersInRange:range withString:string];
switch (combinedText.length) {
case 1:
case 2:
regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{%ld}", (long)combinedText.length] options:NSRegularExpressionCaseInsensitive error:&error];
break;
case 3:
regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-z]{2}\\s" options:NSRegularExpressionCaseInsensitive error:&error];
break;
case 4:
case 5:
case 6:
case 7:
regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{2}\\s\\d{%ld}", (long)combinedText.length - 3] options:NSRegularExpressionCaseInsensitive error:&error];
break;
case 8:
regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-z]{2}\\s\\d{4}\\s" options:NSRegularExpressionCaseInsensitive error:&error];
break;
case 9:
case 10:
case 11:
case 12:
regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"^[a-z]{2}\\s\\d{4}\\s\\d{%ld}$", (long)combinedText.length - 8] options:NSRegularExpressionCaseInsensitive error:&error];
break;
default:
return false;
}
if(error) return false;
NSUInteger numberOfMatches = [regex numberOfMatchesInString:combinedText options:0 range:NSMakeRange(0, combinedText.length)];
return numberOfMatches > 0 || string.length == 0;
}
希望有帮助 显示你的密码你能帮我处理需要在这里执行的正则表达式吗?你能帮我处理需要在这里执行的正则表达式吗?@Prez,我刚刚检查了你的问题内容是否已更改。无论如何,很高兴看到你成功了。谢谢先生……我已经完成了整个过程,但无法理解为什么它会在退格时崩溃。你能为它提供一些指导吗?我当前的解决方案通过
| | string.length==0
和范围:NSMakeRange(0,combinedText.length)
支持退格处理。你的代码里也有这个吗?