как определить номера телефонов в тексте (и заменить их)?

Я знаю, что это можно сделать для плохих слов (проверка массива заданных слов), но как определить номера телефонов в длинном тексте? Я создаю веб-сайт в PHP для клиента, которому нужно избегать людей, использующих поле описания, для размещения своих номеров мобильных телефонов .. (см. Craigslist и т. Д.).

кроме того, он будет нуждаться в некоторой модерации, но мне было интересно, есть ли способ блокировать, по крайней мере, очевидное, как nnn-nnn-nnnn , не прося блокировать другой странный способ писать, как HeiGHT*/four*/nine т. д. …

Related of "как определить номера телефонов в тексте (и заменить их)?"

Добро пожаловать в мир регулярных выражений. В основном вы захотите использовать preg_replace для поиска (некоторый шаблон) и заменить на строку.

Вот что вам нужно:

 $text = preg_replace('/\+?[0-9][0-9()\-\s+]{4,20}[0-9]/', '[blocked]', $text); 

это ищет:

символ плюс (необязательно), за которым следует число, за которым следуют 4-20 номеров, скобки, тире или пробелы, а затем номер

и заменяет строку [заблокирована].

Это улавливает все очевидные комбинации, о которых я могу думать:

 012345 123123 +44 1234 123123 +44(0)123 123123 0123456789 Placename 123456 (although this one will leave 'Placename') 

однако он также лишит любую последовательность из 6 + чисел, что может быть нежелательно!

Для этого вы должны использовать регулярные выражения, как вы, возможно, знаете.

Я нашел этот шаблон, который может быть полезен для вашего проекта:

 <?php preg_match("/(^(([\+]\d{1,3})?[ \.-]?[\(]?\d{3}[\)]?)?[ \.-]?\d{3}[ \.-]?\d{4}$)/", $yourText, $matches); //matches variable will contain the array of matched strings ?> 

Более подробную информацию об этом шаблоне можно найти здесь http://gskinner.com/RegExr/?2rirv, где вы можете даже проверить его в Интернете. Это отличный инструмент для проверки регулярных выражений.

preg_match ($ pattern, $ subject) вернет 1 (true), если шаблон найден у субъекта и 0 (false) в противном случае.

Шаблон, соответствующий вашему примеру, может быть '/ \ d {3} – \ d {3} \ d {4} /'

Однако все, что вы выбрали для своего шаблона, будет страдать как от ложных срабатываний, так и от ложных негативов.

Вы также можете рассмотреть поиск таких слов, как mob, cell или tel рядом с номером.

Детали заполнения сопоставления шаблонов php можно найти по адресу http://www.php.net/manual/en/reference.pcre.pattern.syntax.php.

Ян

ps Это не может быть сделано для плохих слов, как скажут вам люди в Сканторпе.

Я думаю, что использование слишком жесткого регулярного эзиса приведет к большому количеству обнаружений.

Вы должны проверить части из 10 последовательных символов, содержащих более 5 цифр.

Таким образом, похоже, что у вас будет процедура analisys, которая будет вызываться после любой вставки сообщения из-за вычислительного веса.

После того, как выделены 6 или более цифр, замените их по своему усмотрению, включая другие цифры syblings. Лучше в любом случае сохранить исходные данные, чтобы вы могли попробовать и подготовить свой алгоритм обнаружения до тех пор, пока он не будет работать наилучшим образом.

Затем вы также можете изучать свои пользовательские данные для создания более сложных эвристик, таких как нечувствительные к регистру числа, написанные как буквы, смешанные, разделенные точкой и т. Д. …

Дело не в написании самого совершенного регулярного выражения, а в приближении к проблеме статистически и динамически.

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