我对validation
的要求是验证username
,它允许输入小的az和0-9,只有两个符号_
和.
(点)< / p>
但符号不重复。
在名称的开头不允许使用和符号。
是谁可以帮助我?怎么做validation
?
我试过这段代码,但它工作正常,但重复符号我怎么能避免重复?
- (BOOL)validateString:(NSString*)stringToSearch
{
NSString *emailRegex = @"[a-z0-9._]{5,15}";
NSPredicate *regex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [regex evaluateWithObject:stringToSearch];
}
答案 0 :(得分:5)
使用以下正则表达式检查字符是否正确:
^([a-z0-9]+[._])*[a-z0-9]+$
另外并单独检查字符串长度。 (或使用前瞻)
编辑:好像我误解了一些要求。上面的正则表达式也不允许在名称末尾加上符号。如果要在那里允许符号,请将正则表达式更改为
^([a-z0-9]+[._]?)*$
如果您使用谓词,则可以省略前导^
和尾随$
。
答案 1 :(得分:1)
纯正的正则表达式方法,用于计数的前瞻,可能有其他简化的解决方案
"(?=[a-z0-9._]{5,15})([a-z0-9][._]?)+"
修改强>
关于其他问题:避免用户输入被拒绝的字符的内容
从技术上讲,您可以通过实施UITextViewDelegate
方法textView(_:shouldChangeTextInRange:replacementText:)
来实现这一目标。但它可能会让用户觉得键盘没有正确响应。
因此,使用某种显示警报的警报来实施textViewShouldEndEditing(_:)
方法可能是更好的用户体验。
答案 2 :(得分:1)
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *unacceptedInput = nil;
unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:ALPHA] invertedSet];
if ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] <= 1) {
int newLength = (int)textField.text.length + (int)string.length - (int)range.length;
if (newLength > 50) {
return false;
} else {
return true;
}
} else {
return false;
}
}
这里我还必须在我的项目中对文本长度的验证不超过50个字符,这样你就可以删除那个条件