的TextField.text进入应该有特定的格式
我有一个textfield
,我想在这上面输入的格式文本: AA #### 1234 我知道这应该shouldChangeCharactersInRange
委托方法来实现textfield
.nut我无法理解每个角色的状态将如何实施。请给予您的建议。提前感谢!的TextField.text进入应该有特定的格式
,可以有助于验证您的需求的表达可能是:
^[a-z]{2}\s\d{4}\s\d{4}$
这里:
^
- 显示字符串[a-z]{2}
的开始 - 显示A-Z之间的任何字符恰好2倍\s
- 显示空白字符一次。\d{4}
- 显示0-9的任何数字,正好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,我刚刚检查了您的问题内容已更改。无论如何,很高兴看到你做到了。 – NeverHopeless
谢谢先生......我已经完成了全部工作,但无法理解为什么它会在退格时崩溃。请给我提供一些指导吗? – Prez
我的当前解决方案支持'||的帮助退格处理string.length == 0'和'range:NSMakeRange(0,combinedText.length)'。你的代码中是否也有这个? – NeverHopeless
在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;
}
你能帮助我在这里需要实现的正则表达式吗? – Prez
显示您的尝试代码 –