0

私はPHPを初めて使用するので、これが簡単な質問である場合はご容赦ください。ただしpreg_replace、電話番号の市外局番から括弧を削除し、市外局番の間にダッシュを追加する方法がわかりません。と最初の3桁。

現在、私の電話番号はすべて、次の形式で各個人配列(インデックスファイルにあります)に個別に保存されています(800) 111-1111

私はそれらをこのように印刷してもらいたい:そして私はこれをすべて私のクラスの関数で800-111-1111起こさせたい。setphoneNumberPerson

コードは次のようになります。

$this-> phoneNumber = $phoneNumber;  
$pattern = ('/\D+/');
$replacement = '';
if(is_string($phoneNumber)) {
    return preg_replace($pattern, $replacement, $this -> phoneNumber);
} else {
    user_error("Error: Person's phone number must be a string");
} 

私がそれに変更を加えると、オフセットエラーで一致しない括弧が表示されるか、終了区切り文字エラーが発生しません(これは、として設定$patternした場合に発生します(')')。

どんな助けでも大歓迎です。

皆さんありがとう!

4

2 に答える 2

0

このようなものはどうですか、ブライアン?

$pattern = array('/\(/', '/\) /');
$replacement = array('', '-');
if(is_string($phoneNumber)) {
return preg_replace($pattern, $replacement, $this -> phoneNumber);
}

ただし、ハイフンの代わりにピリオドを使用している人は考慮されていません (800.111.1111 など)。余分な部分をすべて削除してから、残りのピリオドと同様に、最初のピリオド (市外局番と次の数字ブロックの間) をハイフンではなくスペースに置き換えてください。

アップデート:

私はこれを広範囲にテストしていませんが、これはあなたが求めているものに対応し、10 進数の電話番号形式 (つまり 800.111.1111) を使用する人々にも対応するはずです。

$pattern = array('/ /','/[(](.*)[)](.*)(-)(.*)/','/(.*)(\.)(.*)(\.)(.*)/');
$replacement = array('','$1-$2-$4','$1-$3-$5');
if(is_string($phoneNumber)) {
return preg_replace($pattern, $replacement, $this -> phoneNumber);
}
于 2012-09-29T22:40:23.300 に答える
0

初期フォーマットが常に同じである場合、置換またはパターンの変数をわざわざ定義する必要はありません。

これを試して:

preg_replace(array("(",") "),"", $this->phoneNumber);
于 2012-09-29T21:02:25.023 に答える