如何验证 [objective-c] 中的用户名?
how to do validation for username in [objective-c]?
我对 validation
的要求是验证 username
允许输入小的 a-z 和 0-9,并且只有两个符号 _
和 .
(点)
但符号不重复
名称开头不允许使用符号。
谁能帮帮我??怎么做 validation
?
我试过这段代码,但它工作正常,但它重复符号我怎样才能避免重复?
- (BOOL)validateString:(NSString*)stringToSearch
{
NSString *emailRegex = @"[a-z0-9._]{5,15}";
NSPredicate *regex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [regex evaluateWithObject:stringToSearch];
}
使用以下正则表达式检查字符是否正确:
^([a-z0-9]+[._])*[a-z0-9]+$
另外单独检查字符串长度。 (或使用前瞻)
编辑: 看来我看错了一些要求。上面的正则表达式也不允许在名称末尾使用符号。如果您想在那里允许符号,请将正则表达式更改为
^([a-z0-9]+[._]?)*$
如果使用谓词,则可以省略前导 ^
和尾随 $
。
纯正则表达式方法,使用前瞻性计数,可能有其他简化的解决方案
"(?=[a-z0-9._]{5,15})([a-z0-9][._]?)+"
编辑
关于附加问题:如何避免用户输入被拒绝的字符
从技术上讲,您可以通过实施 UITextViewDelegate
方法 textView(_:shouldChangeTextInRange:replacementText:)
来实现。但这可能会给用户留下键盘没有正确响应的印象。
因此,通过某种显示警报的警报实施 textViewShouldEndEditing(_:)
方法可能会带来更好的用户体验。
定义验证@"abcdefghijklmnopqrstuvwxyz0123456789_."
-(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 个字符进行验证,这样您就可以删除该条件
我对 validation
的要求是验证 username
允许输入小的 a-z 和 0-9,并且只有两个符号 _
和 .
(点)
但符号不重复
名称开头不允许使用符号。
谁能帮帮我??怎么做 validation
?
我试过这段代码,但它工作正常,但它重复符号我怎样才能避免重复?
- (BOOL)validateString:(NSString*)stringToSearch
{
NSString *emailRegex = @"[a-z0-9._]{5,15}";
NSPredicate *regex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [regex evaluateWithObject:stringToSearch];
}
使用以下正则表达式检查字符是否正确:
^([a-z0-9]+[._])*[a-z0-9]+$
另外单独检查字符串长度。 (或使用前瞻)
编辑: 看来我看错了一些要求。上面的正则表达式也不允许在名称末尾使用符号。如果您想在那里允许符号,请将正则表达式更改为
^([a-z0-9]+[._]?)*$
如果使用谓词,则可以省略前导 ^
和尾随 $
。
纯正则表达式方法,使用前瞻性计数,可能有其他简化的解决方案
"(?=[a-z0-9._]{5,15})([a-z0-9][._]?)+"
编辑
关于附加问题:如何避免用户输入被拒绝的字符
从技术上讲,您可以通过实施 UITextViewDelegate
方法 textView(_:shouldChangeTextInRange:replacementText:)
来实现。但这可能会给用户留下键盘没有正确响应的印象。
因此,通过某种显示警报的警报实施 textViewShouldEndEditing(_:)
方法可能会带来更好的用户体验。
定义验证@"abcdefghijklmnopqrstuvwxyz0123456789_."
-(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 个字符进行验证,这样您就可以删除该条件