Php 找到第一个“;“无效”;字符串中的字符(清除电话号码)

Php 找到第一个“;“无效”;字符串中的字符(清除电话号码),php,split,phone-number,sanitize,Php,Split,Phone Number,Sanitize,我们正在更新一个系统,该系统将注释添加到包含电话号码的字段中。使用PHP,我们试图清理字段并将其拆分为两个。一个是电话号码,另一个是便条。数字总是在前面,音符在后面 我们并不过分关注最终电话号码的确切格式。当用户更新他们的个人资料时,他们可能会被强制清理。数字为美国格式 举几个例子。我想可能还有其他变化: "(123) 456-7890 Betty's cell" becomes "(123) 456-7890" and "Betty's cell" "123-456-7890 Betty'

我们正在更新一个系统,该系统将注释添加到包含电话号码的字段中。使用PHP,我们试图清理字段并将其拆分为两个。一个是电话号码,另一个是便条。数字总是在前面,音符在后面

我们并不过分关注最终电话号码的确切格式。当用户更新他们的个人资料时,他们可能会被强制清理。数字为美国格式

举几个例子。我想可能还有其他变化:

"(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"
有效的电话号码字符应该是
“+()-0123456789”
,为了使事情进一步复杂化,我们需要允许
“ext.”
我可以清理现有数据,以便所有ext.变体都相同。我们很乐意找到字符串中第一个“无效”字符的位置并将其拆分

一直在搜索,但似乎找不到任何适合这种情况的东西。感谢您的建议。

非常感谢

您可以使用下面这样的正则表达式

^([\+\(\)\-0-9 ]*)([A-Za-z' ]*)$
Group1 result始终为number,Group2 result将为名称和姓氏 你可以去看看


您可以使用正则表达式和
preg\u 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);

请看它继续运行

谢谢Geek博士。除了在字符串中有扩展名“ext.”的情况外,这是有效的。是否可以扩展正则表达式以包含“ext.”?使用@trincot中的正则表达式和您的代码,我可以让它工作!非常感谢。非常感谢。有了Geek博士的代码和你的正则表达式,我就能工作了。但愿我能提出两个解决办法。两人都工作了。:)不客气!一旦你有足够的声誉,你就可以投票;-)我比你们两个都高。我想我收到的信息是它记录了但没有显示或者类似的东西,我没有得到投票权。也许你点击了两次:它就像一个开关。再试一次,但它可能会阻止我,直到我的代表更高。
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);