Also versuche ich eine Zeichenfolge, die eine Telefonnummer und eine Erweiterung enthält, zu teilen, da manchmal eine Erweiterung in der Zeichenfolge vorhanden ist. Dies ist mein Versuch:Zerlegung einer Zeichenfolge in eine Telefonnummer und Erweiterung mit 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 />";
}
}
Allerdings, wenn ich diese Tests laufen, um zu sehen, ob es richtig, die Telefonnummer und die Erweiterung teilt, erhalte ich die folgende Ausgabe:
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
Wie Sie sehen können, Es bricht, wenn ich eine Erweiterung ganz ausschließe (die letzten vier Tests). Wie kann ich die preg_match()
Regex korrigieren, so dass die FAIL: ...
Zeilen wie PASS: phone: 9417516550 ext: 0
aussehen?
Musst du unbedingt regex verwenden? – GrumpyCrouton
Ich denke, Sie können die Regex reduzieren, überprüfen Sie bitte meine Antwort. –