Я разработал регулярное выражение (см. Скрипку) /(\+|0|\()[\d()\s-]{6,20}\d/g для сопоставления номеров телефонов в форматах ниже .

(\+|0|\() должно соответствовать + или 0 или (в первую очередь

[\d()\s-] соответствует цифрам, скобкам, пробелам и дефисам между ними.

\d соответствует последней цифре

+43 543 765 5434

0043 543 765 5434

0543 765 5434

+43 (0) 543 765 5434

05437655434

0543-765-5434

К сожалению, это регулярное выражение также сопоставляет числа с разрывами строк между строками , например

" +43

654 416 4444 "или

" stowasser09

65

808090 "

  1. Поэтому я подумал о замене \s в регулярном выражении на [^\S\r\n] для соответствия пробелы, но не разрывы строк, но не смогли заставить его работать?

  2. Также было бы неплохо применить {6,20} ко всему регулярному выражению, а не только часть [\d()\s-], пожалуйста? Я представляю себе что-то вроде /((\+|0|\()[\d()\s-]\d){6,20}/g, т.е. весь соответствующий телефонный номер не должен быть короче 6 и не длиннее 20 символов, включая + | 0 | (в первую очередь и последняя цифра.

Спасибо!

1
BlueChap 18 Авг 2014 в 00:22
2
Просто замените \s пробелом (' ')
 – 
hindmost
18 Авг 2014 в 00:25
Заднее предложение позволит избежать проблемы с переносом строки, но ваш другой вопрос не ясен. Пожалуйста, четко определите шаблоны, которые вы ХОТИТЕ сопоставить, и шаблоны, которые вы НЕ ХОТИТЕ сочетать. ETC - бесполезный дескриптор. Но для сопоставления комбинаций чисел, цифр, необязательного начала +, круглых скобок, дефисов и пробелов, ограниченных 6-20 символами, вы можете использовать: \ +? ((? = [- 0-9 ()]). ) {6,20} Но я не уверен, что вы действительно этого хотите.
 – 
Ron Rosenfeld
18 Авг 2014 в 00:43
Вам вообще нужно их проверять? есть меньше 6 и больше 20, не повредит ли пользователю вводить то, что он хочет.
 – 
user557846
18 Авг 2014 в 00:44
1
Вы можете заменить \s на \h, который соответствует только горизонтальным пробелам.
 – 
Casimir et Hippolyte
18 Авг 2014 в 01:19
1
Теперь, когда ваши требования более ясны, просто определите первый и последний символы как любые и соответствующим образом отрегулируйте длину промежуточной части.
 – 
Ron Rosenfeld
18 Авг 2014 в 14:40

1 ответ

Лучший ответ

\s означает: соответствие любому пробельному символу . просто замените его простым пробелом ' '

/(\+|0|\()[\d() -]{6,20}\d/g

См. эту демонстрацию

1
Ghilas BELHADJ 18 Авг 2014 в 04:54
Спасибо, что ответили на мой 1. вопрос!
 – 
bromelio
18 Авг 2014 в 13:14
Машину ты объясни еще свой второй вопрос?
 – 
Ghilas BELHADJ
18 Авг 2014 в 13:27
Требуется первый +|0|(. так что просто вычтите 1 из {6,20}. он станет {5, 19}
 – 
Ghilas BELHADJ
18 Авг 2014 в 14:26