iOS 中密码字段的字母数字验证
Alphanumeric Validation for password fields in iOS
在我的 iOS 项目中,我想验证密码,我应该接受严格由字母数字组成的密码,即密码必须同时包含字母和数字,我通过以下方法完成了此操作,但是它把数字作为可选的,它看起来很简单但是它占用了我的时间,请帮助我
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z0-9]*"
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *matches = [regex matchesInString:input
options:0
range:NSMakeRange(0, [input length])];
if([matches count] > 0)
{
// Valid input
return true;
}
else
{
return false;
}
使用 NSCharacterSet
而不是正则表达式,
private func containsOnlyNumbers(number:String)-> Bool
{
let numberCharSet = NSCharacterSet(charactersInString: "0123456789")
let stringAfterRemovingNumbers = number.stringByTrimmingCharactersInSet(numberCharSet)
return (stringAfterRemovingNumbers.characters.count==0)//string contains only numbers if it has zero charecters after removing numbers from it
}
你可以的。
NSString *pass= @"hRj4fg2";
NSString *regex = @"^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]*$";//@"^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]*$";//Both will work
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValidPassword = [predicate evaluateWithObject:pass];
NSLog(@"isValidPassword:%d",isValidPassword);
结果:
hRj4fg2* 无效
hRj4fg2 有效
shkdskd 无效
1234545 无效
jam56h&jk 无效
你的代码看起来不错,你应该试试这个模式:
^(?=.*[a-z])(?=.*\d)[a-z\d]*$
确保输入至少包含一个字母和一个数字,并且只接受字母数字组合。
Regex Demo
示例代码:
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(?=.*[a-z])(?=.*\d)[a-z\d]*$"
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *matches = [regex matchesInString:input
options:0
range:NSMakeRange(0, [input length])];
if([matches count] > 0)
{
// Valid input
return true;
}
else
{
return false;
}
希望对您有所帮助!
在我的 iOS 项目中,我想验证密码,我应该接受严格由字母数字组成的密码,即密码必须同时包含字母和数字,我通过以下方法完成了此操作,但是它把数字作为可选的,它看起来很简单但是它占用了我的时间,请帮助我
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z0-9]*"
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *matches = [regex matchesInString:input
options:0
range:NSMakeRange(0, [input length])];
if([matches count] > 0)
{
// Valid input
return true;
}
else
{
return false;
}
使用 NSCharacterSet
而不是正则表达式,
private func containsOnlyNumbers(number:String)-> Bool
{
let numberCharSet = NSCharacterSet(charactersInString: "0123456789")
let stringAfterRemovingNumbers = number.stringByTrimmingCharactersInSet(numberCharSet)
return (stringAfterRemovingNumbers.characters.count==0)//string contains only numbers if it has zero charecters after removing numbers from it
}
你可以的。
NSString *pass= @"hRj4fg2";
NSString *regex = @"^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]*$";//@"^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]*$";//Both will work
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValidPassword = [predicate evaluateWithObject:pass];
NSLog(@"isValidPassword:%d",isValidPassword);
结果:
hRj4fg2* 无效
hRj4fg2 有效
shkdskd 无效
1234545 无效
jam56h&jk 无效
你的代码看起来不错,你应该试试这个模式:
^(?=.*[a-z])(?=.*\d)[a-z\d]*$
确保输入至少包含一个字母和一个数字,并且只接受字母数字组合。
Regex Demo
示例代码:
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(?=.*[a-z])(?=.*\d)[a-z\d]*$"
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *matches = [regex matchesInString:input
options:0
range:NSMakeRange(0, [input length])];
if([matches count] > 0)
{
// Valid input
return true;
}
else
{
return false;
}
希望对您有所帮助!