2017-08-26 14 views
1

電話番号を含むフィールドにメモが追加されたシステムを更新しています。 PHPを使用して、フィールドをクリーンアップして2つに分割しようとしています。 1つは電話番号用で、もう1つはメモ用です。数字は常に最初で、後は音符です。文字列内の最初の「無効な」文字を検索します(電話番号の消去)

結果の電話番号の正確な形式にはあまり関心がありません。ユーザーは、プロファイルを更新するときに、ユーザーを強制的にクリーンアップすることができます。数字は米国の書式です。

例のカップル。私は他のバリエーションがあるかもしれないと想像:

"(123) 456-7890 Betty's cell" 
becomes 
"(123) 456-7890" and "Betty's cell" 

"123-456-7890 Betty's cell 
becomes 
"123-456-7890" and "Betty's cell" 

"456-7890 Betty's cell 
becomes 
"456-7890" and "Betty's cell" 

"456-7890 ext. 123 Betty's cell 
becomes 
"456-7890 ext. 123" and "Betty's cell" 

有効な電話番号の文字が"+()-"だろうし、さらに私たちは、私はので、すべての内線を、既存のデータをサニタイズすることができます"ext."を可能にする必要があり、物事を複雑にします。バリエーションは同じです。文字列内の最初の「無効な」文字の位置を見つけて、それを分割することができれば幸いです。

検索していますが、この状況に適したものは見つかりませんでした。提案を感謝してください。
多くのありがとうございます!

答えて

1

以下のようにRegexを使用できます。

^([\+\(\)\-0-9 ]*)([A-Za-z' ]*)$ 

グループ1の結果あなたが正規表現とpreg_matchでそれを行うことができますが、https://regex101.com/r/PhEQNH/1/

$re = '/^([\+\(\)\-0-9 ]*)([A-Za-z\' ]*)$/'; 
$str = '123-456-7890 Betty\'s cell 
'; 

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); 

// Print the entire match result 
var_dump($matches); 
+0

Tオタク博士。拡張子が "ext"の場合を除き、これは機能します。文字列に正規表現を拡張して "ext"を含めることは可能ですか? – ZeroGravity

+0

例を挙げると、私はコードを書き直すことができます... –

+0

@trincotとあなたのコードからの正規表現を使って、私はそれを動作させました!ありがとうございました! – ZeroGravity

0

上で確認することができます名前と名字 なり、常に数とグループ2の結果:

function splitPhoneNotes($s) { 
    preg_match("~^([\d() +-]+(?:ext\.[\d() -]+)?)(.*)~", $s, $res); 
    return [ 
     "phone" => trim($res[1]), 
     "note" => trim($res[2]) 
    ]; 
} 

// Sample inputs 
$arr = [ 
    "(123) 456-7890 Betty's cell", 
    "123-456-7890 Betty's cell", 
    "456-7890 Betty's cell", 
    "+1 (324) 456-7890 ext. 33 Betty's cell", 
]; 

// Apply the function to each of the inputs 
$res = array_map('splitPhoneNotes', $arr); 

// Results 
print_r($res); 

実行して見てくださいrepl.it

+0

ありがとうございました! Dr Geekと正規表現のコードを使って私はそれを動作させました。私は2つの解決策を作りたいと思っています。両方とも働いた。 :) – ZeroGravity

+0

あなたは大歓迎です!一度十分な評判があればアップヴォートできます;-) – trincot

+0

私はあなたに両方をアップアップしました。私は受け取ったメッセージは記録だと思うが、表示されないかそのようなものだと思う。 – ZeroGravity

関連する問題