0

当社のウェブサイトには多数のオフィスがあり、それぞれに代表電話番号が付いています。多くのオフィスは、(800) 555-5555のような市外局番で入力されています。

これは、入力方法に関係なく、すべてを次のように表示する必要がある方法です: 800- 555-5555

ここが今私がいる場所です

str_replace(array( '(', ')' ), '', $this->data['location_phone']);

これにより両方の括弧が削除されますが、実際には左括弧を削除し、右括弧をダッシュ​​に置き換えるだけです。

4

4 に答える 4

7

置換には配列を使用します。

str_replace(array( '(', ')' ), array('', '-'), $this->data['location_phone']);

詳細については、str_replaceドキュメント ページを参照してください。

于 2014-06-25T17:19:49.760 に答える
1

すでに行っていることと同様のことを行うことができます.. と の両方()で置き換える代わりに、 を置き換えてから、 で個別に置き換える''ことができます。()-

str_replace(array('('), '', $this->data['location_phone']);

str_replace(array(')'), '-', $this->data['location_phone']);

または、さらに良いことに、(他の回答に示されているように) 1 行に結合します。

str_replace(array( '(', ')' ), array('', '-'), $this->data['location_phone']);
于 2014-06-25T17:19:50.017 に答える
1

この回答preg_matchは、データの再構築に関する問題に対処しているようです。しかし、その回答に投稿された正規表現は、ここで説明されている種類のデータ クリーンアップにはあまり適していません。

したがって、公式のPHPドキュメントの投稿からいくつかの優れた正規表現を使用する、私がまとめたその回答のこのバリエーションを試してください。

// Set test data.
$test_data = array();
$test_data[] = '1 800 555-5555';
$test_data[] = '1-800-555-5555';
$test_data[] = '800-555-5555';
$test_data[] = '(800) 555-5555';

// Set the regex.
$regex = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/';

// Roll through the test data & process.
foreach ($test_data as $data) {
  if (preg_match($regex, $data, $matches)) {

    // Reconstruct the number based on the captured data.
    echo "New number is: " . $matches[1] . '-' . $matches[2] . '-' . $matches[3] . '<br />';

    // Dump the matches to check what is being captured.
    echo '<pre>';
    print_r($matches);
    echo '</pre>';

  }
}

preg_match一致を含むクリーンな結果は次のようになります。

New number is: 800-555-5555
Array
(
    [0] => 1 800 555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
New number is: 800-555-5555
Array
(
    [0] => 1-800-555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
New number is: 800-555-5555
Array
(
    [0] => 800-555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
New number is: 800-555-5555
Array
(
    [0] => (800) 555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
于 2014-06-25T17:21:25.120 に答える