Запретить номера телефонов в тексте с помощью регулярных выражений (когда вместо цифр используются буквы)?

У меня есть поле описания текста для классифицированных объявлений на сайте. Существует отдельное поле для ввода номера телефона для связи с человеком, но многие люди вводят телефон в описание, которое я не хочу.

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

Вот пример кода (который работает только для телефона как числа):

$phone = '0888123123';
$text  = 'Some description with phone set to 0888123123 as well as zero eight eight eight one two three one two three.';

preg_match_all('/('.implode('[\D]*', str_split($phone)).')/i', strip_tags($text), $matches);

if (count($matches) > 0) {
foreach($matches as $value) {
$text = str_replace($value, $phone, $text);
}
}

Я думаю о замене каждой буквы на число из массива, как array('one'=>1) и это будет работать, за исключением случаев, когда у них есть номер где-то еще в тексте, он также заменит его. Есть ли способ обновить регулярное выражение, чтобы поймать регистр букв для этого номера телефона?

РЕДАКТИРОВАТЬ:

Я обновил регулярное выражение с массивом для чисел в буквенном формате, но есть еще одна проблема. Если номер телефона появляется в тексте более одного раза, он не работает:

$text  = 'Some description with phone set to 0888123123 as well as zero eight eight eight one two three one two three and a second time - zero eight eight eight one two three one two three.';

$phone_digits   = array(0=>'zero',
1=>'one',
2=>'two',
3=>'three',
4=>'four',
5=>'five',
6=>'six',
7=>'seven',
8=>'eight',
9=>'nine');
$phone_letters = array();
foreach (str_split($phone) as $number)
{
$phone_letters[] = "($number|$phone_digits[$number])";
}
preg_match_all('/('.implode('[\D]*', $phone_letters).')/i', $text, $matches);

Он соответствует буквам, но не останавливается на последнем номере телефона:

Матчи: «ноль восемь восемь восемь один два три один два три и второй раз — ноль восемь восемь восемь один два три один два три».

вместо сопоставления дважды:

«ноль восемь восемь восемь один два три один два три»

Может ли preg_match не быть жадным и останавливаться, когда найдено первое совпадение, а затем обрабатывать оставшуюся часть строки для дополнительных совпадений?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]