Помогите исправить регулярное выражение
Приветствую!
Применяю регулярное выражение, для номера телефона ((\+?\d{1,3}[\d{2,}\.\- \(\)]{11,}))|(\+?[\d]{10,})/gm По задумке, должно работать только с телефонами состоящими из 10 и 11 цифр. В данном виде, видит цифры которые больше 9 цифр. Однако в этом регулярном выражении есть недостаток, выражение цепляет цифры, в которых больше 11 цифр. Можно исправить выражение, чтобы оно не работало с цифрами, у которых больше 11 цифр? А работало только с цифрами от 10-11. Заранее спасибо, за помощь! |
Vaska, приведи примеры "правильных" номеров и "не правильных"...
|
ksa,
Здесь тестировалось выражение https://regex101.com/r/IJX37n/1 Это выражение я применю, чтобы вырезать из текста номера телефонов написанного в разных вариантах. Однако, в тексте, на сайте, вставляются фотки, у которых название 1_2017092902182426089.jpg, 123451_2017092902182426089.png. выражение вырезает из названия фотки 11 символов. Это нужно бы пофиксить. |
Цитата:
Каких именно? 11 последних? |
Цитата:
Задача, с помощью регулярного выражения вырезать из текста номера телефонов, а другие данные, не трогать. А сейчас регулярное выражение вырезает из названия файла изображений кусок названия. И пути к файлам фоток получаются битые. Это неправильно. |
Цитата:
|
ksa,
по ссылке же есть весь комплект. |
ksa,
Там в результате работы выражения, получается: Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Ну если ты им не пользуешься, то тогда вот текст: Цитата:
|
Цитата:
Цитата:
Пока посмотрю что можно сделать с тем текстом, что ты показал. |
Цитата:
<textarea id='test'> Вариантов написания телефонов достаточно много. Телефоны имеют разное количество цифр: 10, 11, 12. Разное написание: +7 999 999 99 99 7 999 999 99 99 +7999 999 99 99 7999 999 99 99 +7999-999-99-99 7999-999-99-99 +7999-999-9999 7999-999-9999 +7999-9999999 7999-9999999 +79999999999 79999999999 +7.999.999.99.99 +7(999) 999-99-99 +123 (999) 555-66-29 +555 (999) 555-66-29 и вместо цифры страны с оной цифрой 7, есть коды по 2 и по 3 цифры. Можно придумать и ещё много вариантов написания номера телефона. Как это всё учесть в выражении? В тексте могут содержаться ссылки на фотографии и ссылки на страницы сайта, в которых могут быть цифры. Как не зацепить цифры в ссылках? Как их отсортировать от номеров телефонов? 1_2017092902182426089.jpg 123451_2017092902182426089.png </textarea> <div id='info'></div> <script> const txt = document.querySelector('#test').value const re = /\+?[\d\s\-\.()]{11,19}(?=[\n])/gm document.querySelector('#info').innerHTML = txt.match(re).join('<br />') </script> |
Цитата:
Термин "все" подразумевает полное отсутствия иного. А на тот сервис не хожу не только я, но и еще огромная толпа других людей. ;) Т.е. это уже "далеко не все" там бывают. |
Цитата:
<textarea id='test'> Вариантов написания телефонов достаточно много. Телефоны имеют разное количество цифр: 10, 11, 12. Разное написание: +7 999 999 99 99 7 999 999 99 99 +7999 999 99 99 7999 999 99 99 +7999-999-99-99 7999-999-99-99 +7999-999-9999 7999-999-9999 +7999-9999999 7999-9999999 +79999999999 79999999999 +7.999.999.99.99 +7(999) 999-99-99 +123 (999) 555-66-29 +555 (999) 555-66-29 и вместо цифры страны с оной цифрой 7, есть коды по 2 и по 3 цифры. Можно придумать и ещё много вариантов написания номера телефона. Как это всё учесть в выражении? В тексте могут содержаться ссылки на фотографии и ссылки на страницы сайта, в которых могут быть цифры. Как не зацепить цифры в ссылках? Как их отсортировать от номеров телефонов? 1_2017092902182426089.jpg 123451_2017092902182426089.png </textarea> <div id='info'></div> <script> const txt = document.querySelector('#test').value const re = /[+\d\u0020\-\.()]{5,}(?=[\n])/gm document.querySelector('#info').innerHTML = txt.match(re).join('<br />') </script> |
ksa,
ни первое, не второе выражение не работает, ни в PHP $exge = '/\+?[\d\s\-\.()]{11,19}(?=[\n])/m'; $html = preg_replace($exge, '', $html); не в JS. $.validator.addMethod('removeTel', function(value, element) { return !/\+?[\d\s\-\.()]{11,19}(?=[\n])/gm.test(value) }, 'Размещать телефоны запрещено'); Хотя в песочнице, видит почти все варианты написания телефонов, кроме варианта +555 (999) 555-66-29. Его не видит. Если одно и то же выражение не работает одинаково и одновременно в PHP и в JS, тогда это не то, что мне нужно. Выражение, которое я хотел бы исправить, из первого сообщения, - работает одинаково и там и там. В первом выражении вообще ошибка /[+\d\u0020\-\.()]{5,}(?=[\n])/gm Вместо u, возможно, предполагалось w. Даже исправив ошибку /[+\d\w0020\-\.()]{5,}(?=[\n])/gm, выражение не видит половины вариантов написания телефонов. |
Цитата:
Цитата:
Мое выражение прекрасно работает в JS на примере твоего текста. |
|
Часовой пояс GMT +3, время: 09:55. |