2013-05-02 5 views
5

私の電話番号のフォーマットは(987)786-5645です。NSPredicate for phone

- (BOOL)validatePhoneNumberWithString:(NSString*)phone 
{ 
    NSString *pNRegex = @"[(0-9)]{3}+\\ +\\[0-9-]{3}+\\[0-9]{4}"; 
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; 
    return [PNTest evaluateWithObject:phone]; 
} 

私は上記のコードを使用しています。

正確な正規表現のルールは何でしょうか。私は数字と大括弧も考え出すことができます。

ブラケットを閉じた後に空白を検出するにはどうすればよいですか?

+0

「\\([0-9] {3} \\)\\ s [0-9] {3} - [0-9] {4} 'です。 – holex

+0

か...あなただけの空白をオプションにしたい場合: '\\([0-9] {3} \\)\\ S [0-9] {3} - [0-9] {4? } ' – holex

+0

か...あなたはマルチ空白を許可する場合:' \([0-9] {3} \)(\ * S)[0-9] {3} - [0-9]? {4} '...または私が作成し、彼らのために答えているはず、私はいけませんか? – holex

答えて

3

NSString *pNRegex = @"^(\\([0-9]{3}\\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$"; 

、これであなたのpNRegexを交換し、それがあなたのお役に立てば幸いです。

3

電話番号の数字以外の文字をすべて削除して文字列を残しておくとよいでしょう。

正規表現は、入力が非常に厳しくない場合や電話番号が世界中で非常に異なる場合を除き、簡単に壊れる可能性があります。この方法で非常に複雑な正規表現を作成することなく電話番号をサポートできます。

- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber { 
    NSCharacterSet *illegalCharacters = [NSCharacterSet characterSetWithCharactersInString:@" +()-"]; 
    return [[phoneNumber componentsSeparatedByCharactersInSet:illegalCharacters] componentsJoinedByString:@""]; 
} 

ので、代わりの+1 (555) 123-4567

あなただけ15551234567を比較したい:

あなたはちょうどこのような単純な方法を使用することができます。データベースでこれを保存している場合は、おそらくUIと整数の比較に示すためにとにかくフォーマットを制御したいあなただけのNSNumber

としてデータベースに [sanitizedPhoneNumber intValue];を保存することができますので、大規模なデータセットのための文字列の比較よりも高速です

許可するように、単純な正規表現を使用して別の方法0-9(source)数字のみ:

- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber { 
    return [phoneNumber stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [phoneNumber length])]; 
} 
1

使用この表現は、それが

NSString *pNRegex = @"\\([0-9]{3}\\) [0-9]{3}\\-[0-9]{4}"; 
1

チェックこの1私は私のために働きましたt'lごformattのために正常に動作し、

あなたは宇宙のような特別なchrectarsを、(、)与えたいならば、//

NSString *[email protected]"(123)123-1234"; 
    NSString *pNRegex = @"\\([0-9]{3}\\)[0-9]{3}\\-[0-9]{4}"; 
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; 
    BOOL check=[PNTest evaluateWithObject:phone ]; 
    NSLog(@"%i",check); 

O/Pとそのcharectarを追加します -

(123)123-1234 - check=1 

(123123-1234 - check=0 

(123) 123-1234 - check=0 

あなたはエンドブラケットはこの1つを使用した後にスペースを与えたい場合は、

NSString *[email protected]"(123) 123-1234"; 
    NSString *pNRegex = @"\\([0-9]{3}\\)\\ [0-9]{3}\\-[0-9]{4}"; 
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; 
    BOOL check=[PNTest evaluateWithObject:phone ]; 
    NSLog(@"%i",check); 

O/P: -

(123) 123-1234 - check=1 

(123123-1234 - check=0 

(123)123-1234 - check=0 
+0

@Hinata Hyuga:それは今働いていますか? – Balu