Php 工业电话号码Regex(Regex问题)

Php 工业电话号码Regex(Regex问题),php,regex,Php,Regex,我正在尝试从通过联系人表单提交给我的消息中提取电话号码。这种“联系方式”每天收到上千份提交,而且很多提交人都犯了格式错误,例如: “请给我回电话925-943-2343分机304”(号码前无空格) 目前,我的正则表达式(如下所示)缺少这些数字,并且存在某些格式错误(例如数字前缺少空格) foreach(…) { $regex='/^(?:1(?:[.-])?(?:\(?=\d{3}\))?([2-9]\d{2})' .(?:(?试试这个: [01]?[- .]?\(?[2-9]\d{2}\)?[

我正在尝试从通过联系人表单提交给我的消息中提取电话号码。这种“联系方式”每天收到上千份提交,而且很多提交人都犯了格式错误,例如:

“请给我回电话925-943-2343分机304”(号码前无空格)

目前,我的正则表达式(如下所示)缺少这些数字,并且存在某些格式错误(例如数字前缺少空格)

foreach(…)
{
$regex='/^(?:1(?:[.-])?(?:\(?=\d{3}\))?([2-9]\d{2})'
.(?:(?试试这个:

[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}(?:i.{0,3}x?.{0,9})(\d{1,5})

您有权修改联系人表单吗?如果有,添加电话号码文本框将比试图找到一个完美的正则表达式更加健壮。在表单上添加一个电话号码输入字段,该字段具有类似的格式掩码。它还必须验证服务器端的格式。我知道这不是您要寻找的答案,但它可以解决根ca使用问题(例如提取电话号码)而不是修补症状。我同意,对您和用户来说,从可用性角度来看,最好的解决方案似乎是为用户输入一个电话字段。这里有一个。不要使用正则表达式来解析号码。只需删除非数字字符并将其拆分为数字块。$line=“请给我回电话925-943-2343分机304”;如果(preg_match($regex,$line)){echo preg_replace($regex,($1)$2-$3分机$4’,$line);}恐怕没有输出任何内容(使用您的regex)。我认为,即使只是修改它,使它可以接受没有前面空格的数字,也会非常有益。对不起,我没有意识到我在开头有
^
。匹配时使用此字符将您限制在一行的开头。
$regex = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})' 
    .'(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})' 
    .'[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/'; 
$line = "(732) 912 0159 ";
if (preg_match($regex, $line))
{
    $phonenumber = preg_replace($regex, '($1) $2-$3 ext. $4', $line); 
    echo $phonenumber;
}
[01]?[- .]?\(?[2-9]\d{2}\)?[- .]?\d{3}[- .]?\d{4}(?:i.{0,3}x?.{0,9})(\d{1,5})