目前的App,除了第三方登录外,常用的登录方式就是手机号和邮箱帐号登录。
至于帐号的注册,验证码的发送,都是返回给后台之后由后台来完成的,这里不做说明。
文章的最后还会对文本框的输入判断进行一些说明,配合使用。
手机号判断
if (mobile.length == 11) {
// 移动号段正则表达式
NSString * CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
// 联通号段正则表达式
NSString * CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";
// 电信号段正则表达式
NSString * CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";
NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];
BOOL isMatch1 = [pred1 evaluateWithObject:mobile];
NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];
BOOL isMatch2 = [pred2 evaluateWithObject:mobile];
NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];
BOOL isMatch3 = [pred3 evaluateWithObject:mobile];
if (isMatch1 || isMatch2 || isMatch3) {
isPhone = YES;
} else {
[LDCreateUITool showMaskOfTitle:@"请输入正确的手机号/邮箱"];
}
}else{
}
邮箱判断
if ([mobile containsString:@"@"]) {
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
BOOL isEmail = [emailTest evaluateWithObject:mobile];
if (isEmail) {
isEmail = YES;
} else {
isEmail = NO;
}
}
由于是同一个文本框去判断的,所以才用有没有"@"
来区分邮箱和手机号。
这里还要做一些说明,那就是关于文本框的输入判断。
一般来说,为了用户体验我们都是调用文本框的代理方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
来进行实时的监控,或者用
-(void)textFieldDidEndEditing:(UITextField *)textField;
来等文本框失去焦点后判断,不过一般不用这个方法。
由于我们的程序中这两种方法使用起来都有点问题,所以改用通知的方法,其实这个通知的名字也是系统的
// 注册通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(phoneTextFiledEditChanged:) name:@"UITextFieldTextDidChangeNotification" object:self.phoneNumField];
// 这个通知里边的name,我们可以点击进去看,是UITextField.h里边系统自己的
// 1.帐号框的监听
- (void)phoneTextFiledEditChanged:(NSNotification *)notification
{
if (notification.object != self.phoneField) {
return;
}
}
以上。
网友评论