查找字符串中的第一个 "invalid" 个字符(清理 phone 个数字)
Find the first "invalid" character in a string (cleaning phone numbers)
我们正在更新一个系统,在该系统中,注释已添加到包含 phone 个数字的字段中。使用 PHP 我们试图清理字段并将它们分成两部分。一个用于 phone 号码,另一个用于注释。数字总是在前,音符在后。
我们并不过分关注结果 phone 数字的确切格式。用户在更新个人资料时可能会被迫清理它们。这些数字是美国格式。
几个例子。我想可能还有其他变化:
"(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"
有效的 phone 数字字符将是 "+()-0123456789 "
并且为了进一步复杂化我们需要允许 "ext."
我可以清理现有数据所以所有分机。变化是相同的。我们很乐意找到字符串中第一个 "invalid" 字符的位置并将其拆分。
一直在搜索,但似乎找不到适合这种情况的内容。感谢任何建议。
非常感谢!
您可以使用如下正则表达式;
^([\+\(\)\-0-9 ]*)([A-Za-z' ]*)$
第 1 组结果总是数字,第 2 组结果将是名字和姓氏
您可以查看 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);
您可以使用正则表达式和 preg_match
:
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
上查看 运行
我们正在更新一个系统,在该系统中,注释已添加到包含 phone 个数字的字段中。使用 PHP 我们试图清理字段并将它们分成两部分。一个用于 phone 号码,另一个用于注释。数字总是在前,音符在后。
我们并不过分关注结果 phone 数字的确切格式。用户在更新个人资料时可能会被迫清理它们。这些数字是美国格式。
几个例子。我想可能还有其他变化:
"(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"
有效的 phone 数字字符将是 "+()-0123456789 "
并且为了进一步复杂化我们需要允许 "ext."
我可以清理现有数据所以所有分机。变化是相同的。我们很乐意找到字符串中第一个 "invalid" 字符的位置并将其拆分。
一直在搜索,但似乎找不到适合这种情况的内容。感谢任何建议。
非常感谢!
您可以使用如下正则表达式;
^([\+\(\)\-0-9 ]*)([A-Za-z' ]*)$
第 1 组结果总是数字,第 2 组结果将是名字和姓氏 您可以查看 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);
您可以使用正则表达式和 preg_match
:
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
上查看 运行