NSPredicateで電話番号(NSString *)を検証する方法は?
ルール:
最小10桁
最大10桁
最初の桁は7、8、または9である必要がありますありがとう
NSPredicateで電話番号(NSString *)を検証する方法は?
ルール:
最小10桁
最大10桁
最初の桁は7、8、または9である必要がありますありがとう
NSPredicate
正規表現に基づくは、要件に適合します。
NSString *stringToBeTested = @"8123456789";
NSString *mobileNumberPattern = @"[789][0-9]{9}";
NSPredicate *mobileNumberPred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", mobileNumberPattern];
BOOL matched = [mobileNumberPred evaluateWithObject:stringToBeTested];
パターンをそれ自体で文字列に保持する必要はありませんが、正規表現はすでに十分に複雑であるため、NSPredicate
フォーマット文字列から除外すると、コード全体がより明確になります。
以下のコードを使用できます
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
{
if(textField.tag == 111)
{
if([self MobileNumberValidate:string] == TRUE)
return YES;
else
return NO;
}
return YES;
}
#pragma mark - Mobile Number validation
- (BOOL)MobileNumberValidate:(NSString*)number
{
NSString *numberRegEx = @"[0-9]";
NSPredicate *numberTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", numberRegEx];
if ([numberTest evaluateWithObject:number] == YES)
return TRUE;
else
return FALSE;
}
NSString *phoneNumber = @"1234567890";
NSString *phoneRegex = @"[789][0-9]{3}([0-9]{6})?";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
BOOL matches = [test evaluateWithObject:phoneNumber];
以下のコードは、要件に応じて機能します。
働き:
-(BOOL)validatePhone:(NSString *)enteredPhoneNumber
{
NSString *phoneRegex = @"[789][0-9]{9}";
// OR below for advanced type
//NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
return [phoneTest evaluateWithObject:enteredPhoneNumber];
}
あれを呼べ:
if ([self validatePhone:@"9833112299"])
{
NSLog(@"Valid Phone Number");
}
else
{
NSLog(@"Invalid Phone Number");
}
最後の}の最後のViewControllerクラスのいずれかで、以下のコードを貼り付けます
extension String
{
func validateMobile() -> Bool
{
return NSPredicate(format: "SELF MATCHES %@","[789][0-9].{9}").evaluate(with: self)
}
}
ViewControllerクラスでyourTxtFieldを検証する場合は、次のように呼び出すだけです。
if (yourTxtField.text?.validateMobile())!
{
print("It is 10 digit, starting with 7/8/9")
}
else
{
print("Invalid mobile number")
}