【问题标题】:PHP hiding multiple phone numbersPHP隐藏多个电话号码
【发布时间】:2014-11-16 22:07:33
【问题描述】:

我正在尝试用 [hidden] 替换电话号码并在点击时将其显示回来。当只有一个数字时,它工作得很好。但是当有更多时,它会隐藏它,但问题是它为两个隐藏字段返回相同的数字。

$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;

【问题讨论】:

标签: php preg-replace


【解决方案1】:

你想使用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);

【讨论】:

  • 好的。现在我该如何检查 $phone_matches?当我做 sizeOf($phone_matches) 我仍然得到 1
  • 我怎样才能检索到正确数量的手机?在这种情况下,我怎样才能得到 2?
  • @user235196 sizeof($phone_matches[0])
  • 请看我的编辑。为什么它不起作用?我得到数组到字符串的转换错误
  • @user235196 你应该使用$phone_matches[0][$i],而不是$phone_matches[$i]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
相关资源
最近更新 更多