2 回答

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

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 . '})[- ]/';
- 2 回答
- 0 關注
- 187 瀏覽
添加回答
舉報