27

国際電話番号を確認する必要があります。

国際電話番号を検証するのは難しいことを知っているので、簡単に説明します。

+または 00 の場合は 6 ~ 14 の数字

正規表現を使用している現在のコードは、何らかの理由で機能していません。正規表現を開くことができず、クラッシュすると言うだけです。

これが私の現在のコードです:

NSString *phoneRegex = @"^[\+(00)][0-9]{6,14}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];

BOOL phoneValidates = [phoneTest evaluateWithObject:phoneNumber];

どこが間違っていますか?

ありがとう!

4

9 に答える 9

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

この方法は少し良いです。「\」をエスケープしても、コードは機能します。

于 2012-11-01T12:11:17.000 に答える
16

電話番号を検証するためのコピー & ペースト方法:

- (BOOL)validatePhone:(NSString *)phoneNumber
{
    NSString *phoneRegex = @"^((\\+)|(00))[0-9]{6,14}$";
    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];

    return [phoneTest evaluateWithObject:phoneNumber];
}

または電話番号を検証するためのオープン ソースライブラリ

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

于 2015-05-20T19:41:28.453 に答える
2

それはあなたがどれだけ厳密になりたいかによって異なりますが、この正規表現は特に厳密ではないようです。この正規表現は次のように述べています。

キャプチャ括弧:() が + と ? の関係を壊すため、あいまいに見えます (ただし、実装によっては異なる場合があります)。間違っている可能性があります : 任意の数字 0-9 1 または 0 を 6-14 回、次に 1 つの数字 0-9 を次に行末に一致させます。また、バックスラッシュを 2 つにする必要があることにも注意してください... @"\b" は単語の境界です。あなたは次のようなことを試してみたいかもしれません...

@"\\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
于 2012-11-01T11:36:49.860 に答える
1

電話番号を検証する唯一の良い方法は、Google のすばらしい LibPhoneNumberを使用することです。iOS ポートがあります。または、非表示で JavaScript 実装を実行できますUIWebView

(私は後年、まだiOSポートがなかったときに行ったことがあります。魅力的に動作し、古いiPhoneでも非常に高速です。)

于 2016-09-24T13:27:10.623 に答える
1

txtlpmobile.text は文字列です (Mobile no ur going enter)

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

数値のフォーマット用

-(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;
}

長さを取得するため

-(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;
}
于 2014-02-10T10:39:57.283 に答える