preg replace — PHP скрывает несколько телефонных номеров

Я пытаюсь заменить телефонные номера на [скрытые] и показать их снова при нажатии. Это прекрасно работает, когда есть только один номер. Но когда их больше, он их скрывает, но проблема в том, что они возвращают одинаковое число для обоих скрытых полей.

$check ='111 111 1111 / 222 222 2222';
preg_match('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', $check, $phone_matches);
echo sizeOf($phone_matches); //returns 1, why not 2??

В значительной степени, если вы можете помочь мне получить sizeOf($phone_matches) чтобы показать правильную сумму, мне должно быть хорошо оттуда!

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

for($i=0; $i<sizeOf($phone_matches[0]); $i++){
$check = preg_replace('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', '<span class="hide">'.$phone_matches[0][$i].'</span><span class="show">show phone</span>', $check);
}

echo $check;

5

Решение

Вы хотите использовать preg_match_allне preg_match

preg_match_all('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', $check, $phone_matches);
print_r($phone_matches);

Но учтите, что sizeof($phone_matches) будет по-прежнему 1, так как массив совпадений на самом деле $phone_matches[0],

Чтобы перебрать все совпадения, которые вы делаете:

foreach ($phone_matches[0] as $match) {
//Do something with $match
}

Но для чего ты на самом деле пытаясь достичь, нет необходимости preg_match_all совсем. Простая однострочная preg_replace сделает свое дело:

$check = preg_replace('/[(]*\d{3}[)]*\s*[.\- ]*\d{3}[.\- ]*\d{4}/', '<span class="hide">$0</span><span class="show">show phone</span>', $check);
5

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

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

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