wake-up-neo.com

Bestätigen Sie die Telefonnummer ios

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!

25
Thomas Clayson
NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";

Dieser Weg ist etwas besser. Ihr Code funktioniert auch, wenn Sie das "\" entziehen.

34
whiteagle

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

https://github.com/iziz/libPhoneNumber-iOS

16
Manuel Escrig

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
2
jainvikram444

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;
}
1
mandeep

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

0
NSurajit

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)
}
0
Abhishek Mishra

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.)

0
meaning-matters

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
0
User558