如何在[objective-c]中对用户名进行验证?

时间:2015-12-23 11:49:58

标签: ios objective-c validation uitextfield

我对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];



}

3 个答案:

答案 0 :(得分:5)

使用以下正则表达式检查字符是否正确:

^([a-z0-9]+[._])*[a-z0-9]+$

Regular expression visualization

Debuggex Demo

另外并单独检查字符串长度。 (或使用前瞻)

编辑:好像我误解了一些要求。上面的正则表达式也不允许在名称末尾加上符号。如果要在那里允许符号,请将正则表达式更改为
^([a-z0-9]+[._]?)*$

如果您使用谓词,则可以省略前导^和尾随$

答案 1 :(得分:1)

纯正的正则表达式方法,用于计数的前瞻,可能有其他简化的解决方案

"(?=[a-z0-9._]{5,15})([a-z0-9][._]?)+"

修改

关于其他问题:避免用户输入被拒绝的字符的内容

从技术上讲,您可以通过实施UITextViewDelegate方法textView(_:shouldChangeTextInRange:replacementText:)来实现这一目标。但它可能会让用户觉得键盘没有正确响应。

因此,使用某种显示警报的警报来实施textViewShouldEndEditing(_:)方法可能是更好的用户体验。

答案 2 :(得分:1)

定义验证@“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个字符,这样你就可以删除那个条件