亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為電話號碼添加自定義掩碼

為電話號碼添加自定義掩碼

PHP
蠱毒傳說 2023-05-26 15:50:10
所以我正在創建一個簡單的函數來屏蔽電話號碼。我的電話號碼有 9 位數字,我希望preg_replace它們帶有給定的掩碼,例如2-2-2-1-2or3-2-2-2等。我試過這個:$mask = explode('-', '3-2-2-2');$pattern = '';$replace = '';foreach ($mask as $key => $value) {    if ($key == 0) {        $pattern = '/\(?(\d{' . $value . '})\)?[- ]';        $replace = '$' . ++$key . '-';        continue;    }    if ($key == count($mask) - 1) {        $pattern .= '?(\d{' . $value . '})/';        $replace .= '$' . ++$key;        break;    }    $pattern .= '?(\d{' . $value . '})[- ]';    $replace .= '$' . ++$key . '-';}return preg_replace($pattern, $replace, '902000810');結果是902-00-08-10。有時會出錯preg_replace(): No ending delimiter '/' found。我怎樣才能將其重構為不出錯?
查看完整描述

2 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

假設:


$num = '902000810';

$mask = explode('-', '3-2-2-2');

除了使用正則表達式從掩碼格式化電話號碼外,還有其他方法。


使用格式化字符串:


$maskPH = array_map(fn($i) => "%{$i}s", $mask);

$formatI = implode('', $maskPH);

$formatO = implode('-', $maskPH);


$result = vsprintf($formatO, sscanf($num, $formatI));

使用unpack:


$format = array_reduce($mask, function ($c, $i) {

    static $j = 0;

    return "{$c}A{$i}_" . $j++ . "/";

});


$result = implode('-', unpack($format, $num));


查看完整回答
反對 回復 2023-05-26
?
森欄

TA貢獻1810條經驗 獲得超5個贊

preg_replace(): No ending delimiter '/' found 意味著您的模式不會以 a/作為最后一個字符終止。

但是這三種模式都缺乏正確的格式:

您應該相應地修改它們。

從:

$pattern = '/\(?(\d{' . $value . '})\)?[- ]';

$pattern .= '?(\d{' . $value . '})/';

$pattern .= '?(\d{' . $value . '})[- ]';

到:

$pattern = '/\(?(\d{' . $value . '})\)?[- ]/';

$pattern .= '/?(\d{' . $value . '})/';

$pattern .= '/?(\d{' . $value . '})[- ]/';


查看完整回答
反對 回復 2023-05-26
  • 2 回答
  • 0 關注
  • 187 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號