我尝试为UITextField创建一个输入掩码,用于输入飞机呼号。面具应该是" F - "和4个字母。我用正则表达式尝试它,但它没有正常工作。我告诉你我的代码。用它输入任何角色是不可能的。
if (textField==_tImmat) {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSString *expression = @"^(F-)([A-Z]{4})$";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString options:0 range:NSMakeRange(0, [newString length])];
if (numberOfMatches == 0){
return NO;
}
创建正则表达式的任何想法都适用于像这样的字符串值:" F-XXXX"其中X是大写字母? 谢谢你的帮助...
答案 0 :(得分:0)
您的验证仅接受值F-XXXX
。如果用户输入F
,则以黑色文本字段开头,验证失败,因为它不是F-XXXX
。
如果输入的文本不可能与模式匹配,则需要让用户输入每个字符并且仅验证失败。
没有理由为此使用正则表达式。只需扫描newString
即可。确保它以F
开头。如果长度为2或更长,请检查第二个字符是否为“`”。然后只需确保长度小于6,最后几个字符是字母A-Z。
答案 1 :(得分:0)
我猜你的代码在你的shouldChangeCharactersInRange方法中?
如果是这样,因为您要使用这种特定格式,所以不能输入其他字符串,即除非newString的值为F-< 4 LETTERS>,否则该方法将返回NO。
因此,您可以将验证移至textFieldShouldReturn方法:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSString *expression = @"^(F-)([A-Z]{4})$";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:textField.text options:0 range:NSMakeRange(0, [textField.text length])];
if (numberOfMatches == 0)
{
NSLog(@"wrong format!");
}
else
{
NSLog(@"correct format!");
}
return NO;
}
(顺便说一句,对于使用NSRegularExpressionCaseInsensitive的选项,这意味着它允许用户输入大写和小写字符并验证它们是否正确)
如果您想验证用户输入和限制输入非法字符,我会将您的代码更改为以下内容:
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
switch (newString.length)
{
case 0:
//allow user empty string
return YES;
case 1:
//check that first character is F
return [newString isEqualToString:@"F"];
case 2:
//check that the second character is -
return [newString isEqualToString:@"F-"];
case 3 ... 6:
//this will check the last four characters based on your regex
{
NSString *expression = @"^(F-)([A-Z]{0,4})$"; //notice the added range
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString options:0 range:NSMakeRange(0, [newString length])];
if (numberOfMatches == 0)
{
return NO;
}
else
{
return YES;
}
}
default:
//in all other cases validation will fail
return NO;
}