Мне нужно добавить регулярное выражение, которое соответствует всем возможным действительным телефонным номерам в формате E.164.
Это регулярное выражение прекрасно работает для телефонных номеров в Северной Америке, но мне нужно кое-что, что будет работать и для международных номеров:
^(+1|1)?([2-9]\d\d[2-9]\d{6})$
Пример: +13172222222 соответствует 13172222222 все еще совпадает, потому что +1 или 1 являются дополнительными 3172222222 все еще совпадает, потому что +1 или 1 являются необязательными 3171222222 не соответствует и не является действительным номером NANPA.
Источник: Freeswitch.org
Я также сталкивался с этим смежным вопросом, но думаю, что он слишком сумасшедший для моих нужд. В моем случае я просто проверяю запись в черном списке, который сравниваю с входящими данными Twilio; так что меня больше волнует погода, код страны действителен. Мне действительно нужно только проверить, соответствует ли число общей E.164 форме, а не предполагать, что это NANPA.
Чтобы лучше понять, что мне нужно, вот пример из документации Twilio:
Все номера телефонов в запросах от Twilio в формате E.164, если возможно. Например, (415) 555-4345 будет проходить как "+1 4155554345". Однако иногда случаются случаи где Twilio не может нормализовать Идентификатор входящего звонка на E.164. В этих ситуации Twilio будет сообщать в сыром строка идентификатора вызывающего абонента.
Я хочу сопоставить что-то вроде +1 4155554345, но не (415) 555-4345, 415555434, 555-4345 или 5554345. Регулярное выражение не должно ограничиваться совпадением только с кодом страны США. По сути, он должен соответствовать формату +xxxxxxxxxxx. Я также думаю, что номер может быть длиннее, так как есть многозначные коды стран, например, в Великобритании. Номер T-Mobile в Великобритании - +447953966150. Я обновлю его, если смогу найти лучший пример.