【发布时间】:2016-01-12 12:24:34
【问题描述】:
当谈到正则表达式时,我绝对不是最糟糕的,但这个让我很难过。
简而言之,这是我目前拥有的代码。
$aNumbers = array(
'612345678',
'546123465',
'131234567',
'+31(0)612345678'
);
foreach($aNumbers as $sNumber) {
$aMatches = array();
$sNumber = preg_replace('/(\(0\)|[^\d]+)/', '', $sNumber);
preg_match('/(\d{1,2})?(\d{3})(\d{3})(\d{3})$/', $sNumber, $aMatches);
var_dump($sNumber);
var_dump($aMatches);
}
简单来说,就是想匹配特定格式的电话号码,保证统一显示。
+31(0)612345678
+31(0)131234567
两个剥离都没有 + 和 (0)。 部分切割:
31 6 123 456 78
Country Net Number
31 13 123 456 78
Country Net Number
现在,在某些情况下,+31(或 +1、+222)是可选的。 6 和 13 总是包含在内,但有趣的是,以下格式也是可能的:
31 546 123 456
Country Net Number
这甚至可以使用正则表达式吗?
【问题讨论】:
-
是的,但如果我们现在不知道所有的净数字,则不是。
-
您确定在第二个示例末尾有
8吗?这似乎与您在部分削减之前写的数字不符。 -
数据从何而来?理想情况下,您不必这样做。当用户填写表格时,呼叫代码和电话号码应该在他们自己的单独字段中,您所要做的就是对其进行清理。