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を抽出し、さらに処理するためにすべての非数字を削除します。