電話番号と内線番号を含む文字列を分割しようとしています。これは私の試みです:preg_matchを使用して電話番号と内線番号に文字列を分割する
$tests[] = "941-751-6550 ext 2204";
$tests[] = "(941) 751-6550 ext 2204";
$tests[] = "(941)751-6550 ext 2204";
$tests[] = "9417516550 ext 2204";
$tests[] = "941-751-6550 e 2204";
$tests[] = "941-751-6550 ext 2204 ";
$tests[] = "941-751-6550 extension 2204";
$tests[] = "941-751-6550 x2204";
$tests[] = "(941) 751-6550";
$tests[] = "(941)7516550";
$tests[] = "941-751-6550 ";
$tests[] = "941-751-6550";
foreach ($tests as $test) {
preg_match('#([\(\)\s0-9\-]+)(.+$)#',$test,$matches);
$phone = preg_replace('#[\-\(\)\s]#','',$matches[1]);
$extension = preg_replace('#[^0-9]#','',$matches[2]);
if ($phone == '9417516550'
&& ($extension == '2204'
|| $extension == '0')) {
echo "PASS: phone: $phone ext: $extension<br />";
} else {
echo "FAIL: phone: $phone ext: $extension<br />";
}
}
しかし、私はそれが適切に電話番号と内線を分割かどうかを確認するためにこれらのテストを実行したときに、私は次の出力を得る:
PASS: phone: 9417516550 ext: 2204
PASS: phone: 9417516550 ext: 2204
PASS: phone: 9417516550 ext: 2204
PASS: phone: 9417516550 ext: 2204
PASS: phone: 9417516550 ext: 2204
PASS: phone: 9417516550 ext: 2204
PASS: phone: 9417516550 ext: 2204
PASS: phone: 9417516550 ext: 2204
FAIL: phone: 941751655 ext: 0
FAIL: phone: 941751655 ext: 0
FAIL: phone: 9417516550 ext:
FAIL: phone: 941751655 ext: 0
あなたが見ることができるように、私がエクステンションを完全に除外すると(最後の4回のテスト)それは壊れます。 FAIL: ...
の行がPASS: phone: 9417516550 ext: 0
のようになるように、preg_match()
正規表現を修正するにはどうすればよいですか?
あなたは絶対に正規表現を使用する必要がありますか? – GrumpyCrouton
私はあなたが正規表現を減らすことができると思う、私の答えを確認してください。 –