Я использую это регулярное выражение для захвата телефонных номеров из длинной строки:
\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*
тестовая строка:
asdjasjkdh 1 800 555 1234 01/01/2012 asdhajksdh 18005551234 jkas 12/11/2012 hd sample@email.com asdha jksdh asjdhjak +86 800 555 1234 sdkajs test@gmail.com lorem ipsume. I am dotminors.zszsd@gmail.ca 18005551234 SADASDD +1 800 555-1234 SSDA ASASD 1-800-555-1234 1 (800) 555-1234 asdsasdadsadasda sdada 8005551234 x5678 wkadakasd asdjsadksad (800)5551234
" 1 800 555 1234 ",
" 18005551234 ",
" +86 800 555 1234 ",
" 18005551234 ",
" +1 800 555-1234 ",
" 1-800-555-1234 ",
"1 (800) 555-1234 ",
" 8005551234 x5678 ",
" (800)5551234"
Как вы заметили, некоторые из чисел имеют пробелы в начале или в конце. Как я могу получить только часть телефонного номера, не выполняя после этого отдельную обрезку?
РЕДАКТИРОВАТЬ: Если я удаляю \s*
на обоих концах, это дает мне несколько телефонных номеров без последней цифры. Я обновил свой вопрос с выводом:
"1 800 555 1234",
" 1800555123",
"+86 800 555 1234",
" 1800555123",
"+1 800 555-1234",
"1-800-555-1234",
"1 (800) 555-1234",
" 8005551234 x5678",
" (800)5551234"
Как вы заметите, на втором и четвертом телефонных номерах в конце пропущена цифра «4», и все еще остается пробел.