1

我在验证 TextField 时遇到了问题。

我的问题是,我有 3 个文本字段。

1.姓名(我想要8到20个字符,包括大小写字母)

2.Email Id(有效的email id)

3.密码(必须强,即8到20个字符,包括小写、大写、数字和至少一个特殊字符)

我已经用 regx 解决了前两个条件。我陷入了密码验证条件,当我在密码中使用相同的 regx 时,我输入了正确的一个,它也显示错误密码警报。我正在使用如下。

NSString *passwordRegex =@" ^.*(?=.{8,})(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$";
NSPredicate *passwordTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", passwordRegex];
BOOL bool = [passwordTest evaluateWithObject:password.text];

if (bool==NO) {
    UIAlertView *messageBox = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Title", nil) message:NSLocalizedString(@"Invalid Password", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];[messageBox show];
    [messageBox release]; 
    passwordValid=0;
}else passwordValid=1;

提前致谢

4

2 回答 2

1

试试这个代码

BOOL passwordValid;
NSString *passwordRegex =@"^.*(?=.{8,})(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$";
NSPredicate *passwordTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", passwordRegex];
NSString *stringWithPass = @"C0mp@redText";
BOOL isPasswordValid = [passwordTest evaluateWithObject:stringWithPass];

if (isPasswordValid==NO) {
    UIAlertView *messageBox = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Title", nil) message:NSLocalizedString(@"Invalid Password", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
    [messageBox show];
    passwordValid=0;
}else passwordValid=1;

我认为你必须从字符串开始的地方删除空格^

于 2013-04-27T09:23:57.007 回答
0

尝试这个 :

    ^.*(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W]).*$

并检查这个

http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/

于 2013-04-27T09:31:42.917 回答