Ich muss eine internationale Telefonnummer bestätigen.
Ich weiß, dass es schwierig ist, eine internationale Telefonnummer zu bestätigen, daher halte ich es einfach:
+
oder 00 dann 6-14 Nummern
Mein aktueller Code, der einen Regex verwendet, funktioniert aus irgendeinem Grund nicht, was ich nicht herausfinden kann. Es sagt nur, dass es die Regex nicht öffnen kann und abstürzt.
Hier ist mein aktueller Code:
NSString *phoneRegex = @"^[\+(00)][0-9]{6,14}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
BOOL phoneValidates = [phoneTest evaluateWithObject:phoneNumber];
Wohin gehe ich falsch?
Vielen Dank!
NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";
Dieser Weg ist etwas besser. Ihr Code funktioniert auch, wenn Sie das "\" entziehen.
Copy & Paste -Methode zum Überprüfen von Telefonnummern:
- (BOOL)validatePhone:(NSString *)phoneNumber
{
NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
return [phoneTest evaluateWithObject:phoneNumber];
}
oder Open Source -Bibliothek zum Überprüfen von Telefonnummern
nun, es hängt davon ab, wie streng Sie sein wollen. Es scheint nicht, dass dieser Regex besonders streng ist. Diese Regex sagt:
beginnen Sie am Anfang der Zeile passen Sie ein + (oder möglicherweise 1 oder 0) an, was mehrdeutig erscheint (aber möglicherweise nicht von der Implementierung abhängt), da die Capture-Klammern :() die Beziehung zwischen + und? .__ auflösen. möglicherweise falsch platziert: passt auf jede Ziffer 0-9 1 oder 0 mal 6-14 mal dann eine Ziffer 0-9 dann Zeilenende . Sie beachten auch, dass ein Backslash vorhanden sein muss verdoppelt ... @ "\ b" für eine Word-Grenze. Vielleicht möchten Sie etwas versuchen ...
@"\\b[\\d]{3}\\-[\\d]{3}\\-[\\d]{4}\\b"
would I think match your example, but it wouldn't match
(555) 555 - 5555 or
555.555.5555 or
+44 1865 55555
txtlpmobile.text ist die Zeichenfolge (Mobile wird nicht eingegeben)
int length = [self getLength:txtLpMobile.text];
if(length == 10) {
if(range.length == 0)
return NO;
}
if(length == 3){
NSString *num = [self formatNumber:txtLpMobile.text];
txtLpMobile.text = [NSString stringWithFormat:@"(%@) ",num];
if(range.length > 0) {
txtLpMobile.text = [NSString stringWithFormat:@"%@",[num substringToIndex:3]];
}
} else if(length == 6) {
NSString *num = [self formatNumber:txtLpMobile.text];
txtLpMobile.text = [NSString stringWithFormat:@"(%@) %@-",[num substringToIndex:3],[num substringFromIndex:3]];
if(range.length > 0) {
txtLpMobile.text = [NSString stringWithFormat:@"(%@) %@",[num substringToIndex:3],[num substringFromIndex:3]];
}
}
NSUInteger newLength;
newLength = [txtLpMobile.text length] + [string length] - range.length;
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return (([string isEqualToString:filtered])&&(newLength <= CHARACTER_LIMIT));
für die Formatierungsnummer
-(NSString*)formatNumber:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [mobileNumber length];
if(length > 10)
{
mobileNumber = [mobileNumber substringFromIndex: length-10];
}
return mobileNumber;
}
um lang zu werden
-(int)getLength:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [mobileNumber length];
return length;
}
NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}|[0-9]{6,14}$";
Dies wurde mit RegularExpression getestet. Dies wird mit Ländercode OR ohne Ländercode akzeptiert
In Swift 4 -
func ValidateMobileNumber(txtFeid : UITextField, strChk : String, range: NSRange) -> Bool {
if txtFeid.text!.count >= 10 {
return false
}
let formatePre = "^((\\+)|(00))[0-9]{6,14}$"
let resultPredicate : NSPredicate = NSPredicate(format: "SELF MATCHES %@",formatePre)
return resultPredicate.evaluate(with: strChk)
}
Die einzig gute Möglichkeit, Telefonnummern zu überprüfen, ist die Verwendung von Googles erstaunlicher LibPhoneNumber . Es gibt einen iOS-Port oder Sie können die JavaScript-Implementierung in einer versteckten UIWebView
ausführen.
(Ich habe die letzten Jahre gemacht, als es noch keinen iOS-Port gab. Funktioniert wie ein Zauber und ist auch auf alten iPhones sehr schnell.)
Einfacher Weg, um die Telefonnummer und das Passwort zu überprüfen, folgen Sie einfach den nachstehenden Anweisungen.
if ((self.mobileTxtFld.text.length < 10 )) {
[_mobileTxtFld becomeFirstResponder];
}
else if ((self.passwordTxtFld.text.length < kPasswordCharacterMinLimit) || (self.passwordTxtFld.text.length > kPasswordCharacterMaxLimit)) {
// show alert
}
danach können Sie die Delegierte-Methode "shouldChangeCharactersInRange" in Textdatei implementieren, in die Sie diesen Code schreiben
if (textField == _mobileTxtFld) {
if([string rangeOfCharacterFromSet:ALLOWED_NUMBERS].location == NSNotFound){
NSUInteger newLength = [textField.text length] + [string length] - range.length;
if(newLength > kMobileNumberLimit - 1){
if(textField.text.length != kMobileNumberLimit){
textField.text = [NSString stringWithFormat:@"%@%@",textField.text,string];
}
[textField resignFirstResponder];
return NO;
}
else{
return YES;
}
}
else{
return NO;
}
}
return YES;
hier sind ALLOWED_NUMBERS und kMobileNumberLimit
#define kMobileNumberLimit 10
#define ALLOWED_NUMBERS [[NSCharacterSet decimalDigitCharacterSet] invertedSet]
#define minLimit 6
#define maxLimit 17