2

13 個の数値のみを使用したい、または 13 個の数値の前に「+」sysmbol を付けることができるので、+ は必須ではありません例: 1234567891234 別の例: +1234567891234

電話番号の形式は国際的である必要があります。iPhoneで電話番号を検証するための正規表現はありますか

上記のリンクを試しましたが、この +1234545 ですが、13 個の数字のみを使用するか、+ の前にその 13 個の数字を付けることができます。

教えてください、ここで何を変更できますか

これは私が試したコードです

NSString * forNumeric = @"^\\+(?:[0-9] ?){6,14}[0-9]$";

    BOOL isMatch = [[textFieldRounded text] isMatchedByRegex:forNumeric];

    if (isMatch == YES){

        NSLog(@"Matched");
    }
    else {
        NSLog(@"Not matched");
    }
4

6 に答える 6

4
    NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})";

先行0または先行+44を一度見つけたら、なぜもう一度検索するのですか?

基本的な単純化は

    NSString * regex = @"((07|00440?7|\\+440?7)\\d{9})";

その後に

    NSString * regex = @"((07|(00|\\+)440?7)\\d{9})";

その後に

    NSString * regex = @"((0|(00|\\+)440?)7\\d{9})";

ただし、一般的なダイヤルプレフィックスは00だけではありません。米国とカナダでは、011が使用されています。

それを追加し、順序を変えると、次のようになります。

    NSString * regex = @"(^((0(0|11)|\\+)440?|0)7\\d{9}$)";

またはできれば

    NSString * regex = @"(^(?:(?:0(?:0|11)|\\+)(44)0?|0)(7\\d{9}$))";

最初に00447、011447、+ 447、004407、0114407、+ 4407、07を許可し、非キャプチャグループを使用します。

より広い入力形式のマッチングのために、さまざまな句読点(ハイフン、角かっこ、スペース)を使用できるようにする

    NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7\\d{9})$)";

44の国コードを$1で抽出し(番号が07として入力された場合はnull ...)、10桁のNSNを$2で抽出します。

ただし、070および076(07624を除く)で始まる番号は携帯電話番号ではないことに注意してください。

最終的なパターン:

    NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7([1-5789]\\d{2}|624)\\)?[\\s-]?\\d{6}))$)";

$ 2でNSNを抽出し、さらに処理するためにすべての非数字を削除します。

于 2012-11-06T09:16:56.230 に答える
1

これはどう?

NSString *forNumeric = @"\\+?[0-9]{6,13}";
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"self matches %@", forNumeric];
BOOL isMatch = [predicate evaluateWithObject:@"+1234567890123"];

if (isMatch) NSLog(@"Matched");
else NSLog(@"Not matched");
于 2012-01-25T10:15:30.037 に答える
1

^(\+?)(\d{13})$トリックを行う必要があり、Objective-Cの使用法のためにスラッシュをエスケープします。13桁、オプション+プレフィックス付き。

正規表現を試してみたい場合は、このようなサービスを視覚的なフィードバックに使用できます。非常に便利です。

NSString * forNumeric = @"^(\\+?)(\\d{13})$";
于 2012-01-25T10:18:01.480 に答える
1
NSDataDetector *matchdetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
                                                                error:&error];
NSUInteger matchNumber = [matchdetector numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];

次に使用するUITextField場合:

textField.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
于 2012-01-25T09:55:31.590 に答える
0

英国の携帯電話番号を検証するために私が行うことは次のとおりです。

- (BOOL) isValidPhoneNumber
{
    NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})";
    NSPredicate *testPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
    BOOL validationResult = [testPredicate evaluateWithObject: self];
    return validationResult;
}

それがあなたを助けるかどうか見てください

于 2012-01-25T10:12:49.860 に答える
0

you could try using a NSDataDetector:

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSDataDetector_Class/Reference/Reference.html

available in iOS4+

于 2012-01-25T09:46:42.160 に答える