gpt4 book ai didi

ios - 验证 objective-c 中同一文本字段中的电话号码和电子邮件

转载 作者:行者123 更新时间:2023-12-01 16:23:30 25 4
gpt4 key购买 nike

任何人都可以帮助解决这个问题我是开发新手

我需要使用电话号码以及具有相同文本字段的电子邮件 ID 登录,我如何才能实现这一点,因此我必须为电话号码以及美国设置 10 位数字限制,例如 (838)-(838)-3333 格式的电话号码。 .和具有相同文本的电子邮件ID ..我如何验证用户输入电话号码或电子邮件..任何人都可以帮助我解决问题
提前致谢
这是我的代码

 if (!([self.usernameTextField.text validEmail] || [self.usernameTextField.text validateMobile])){
[self ShowAlert:@"Please enter a valid email address/phonenumber"];

}

- (BOOL)validEmail {
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
BOOL isValid = [emailTest evaluateWithObject:self];
return isValid;
}

- (BOOL)validateMobile {
NSString *ACCEPTABLE_CHARECTERS = @" 0123456789+-";
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARECTERS] invertedSet];
NSString *filtered = [[self componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
// NSString* formattedNumber = [Contact formatPhoneNumber:phoneNumber codeLength:3 segmentLength:4];
return [self isEqualToString:filtered];
}

最佳答案

在这里,我添加我的答案并根据您的需要进行自定义。

步骤 1

连接文本字段并调用当前类的委托(delegate),例如

 @interface ViewController ()<UITextFieldDelegate>


@property (strong, nonatomic) IBOutlet UITextField *currentTextfield;

@end

步骤 2

获取文本字段委托(delegate) shouldChangeCharactersInRange 上的第一个字符并检查它是数字(电话号码)还是字符串(电子邮件)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)textEntered

{
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: textEntered];

NSString *abnRegex = @"[A-Za-z]+";
NSPredicate *abnTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", abnRegex];
if (([abnTest evaluateWithObject:resultingString] || resultingString.length == 0)) {
NSLog(@"its email");
}
else
{
NSLog(@"its phone number");
}
return YES;
}

步骤 3

如果是电话号码,则根据 (838)-(838)-3333格式排列字母
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)textEntered

{
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: textEntered];

NSString *abnRegex = @"[A-Za-z]+";
NSPredicate *abnTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", abnRegex];
if (([abnTest evaluateWithObject:resultingString] || resultingString.length == 0)) {
NSLog(@"its email");
}
else
{
NSLog(@"its phone number");
//(838)-(838)-3333
if (range.length == 1) {
// Delete button was hit.. so tell the method to delete the last char.
textField.text = [self formatPhoneNumber:resultingString deleteLastChar:YES];
} else {
textField.text = [self formatPhoneNumber:resultingString deleteLastChar:NO ];
}
return false;

}
return YES;
}

-(NSString*) formatPhoneNumber:(NSString*) simpleNumber deleteLastChar:(BOOL)deleteLastChar {
if(simpleNumber.length==0) return @"";
// use regex to remove non-digits(including spaces) so we are left with just the numbers
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\\s-\\(\\)]" options:NSRegularExpressionCaseInsensitive error:&error];
simpleNumber = [regex stringByReplacingMatchesInString:simpleNumber options:0 range:NSMakeRange(0, [simpleNumber length]) withTemplate:@""];

// check if the number is to long
if(simpleNumber.length>10) {
// remove last extra chars.
simpleNumber = [simpleNumber substringToIndex:10];
}

if(deleteLastChar) {
// should we delete the last digit?
simpleNumber = [simpleNumber substringToIndex:[simpleNumber length] - 1];
}

// 123 456 7890
// format the number.. if it's less then 7 digits.. then use this regex.
if(simpleNumber.length<7)
simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d+)"
withString:@"($1)-($2)"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [simpleNumber length])];

else // else do this one..
simpleNumber = [simpleNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d{3})(\\d+)"
withString:@"($1)-($2)-$3"
options:NSRegularExpressionSearch
range:NSMakeRange(0, [simpleNumber length])];
return simpleNumber;
}

第四步

最后在按钮操作上验证您的电子邮件或电话号码是否有效。
NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];

NSString *phoneRegex = @" (((\d{3}) ?)-((\d{3}) ?))?-\d{4}";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];

if([emailTest evaluateWithObject:currentTextfield.text] == NO && [phoneTest evaluateWithObject:currentTextfield.text] == NO)
{
NSLog(@"Please enter a valid email address/phonenumber");

}

else
{
//login successful

}

关于ios - 验证 objective-c 中同一文本字段中的电话号码和电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46538998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com