从电话号码输入字段中提取数字(PHP)

5
我有一个电话号码输入框,允许用户以任何格式添加电话号码(例如555-555-5555、(555) 555 - 5555等)。
由于它是一个电话号码字段,因此我可以忽略字段中除数字以外的所有内容。
我目前正在使用以下代码。 它提取了所有数字,但问题在于它们不按顺序排列 - 它们是杂乱无章的。
如何按照原始字符串中出现的顺序提取数字?
preg_match_all('/\d+/', $Phone, $matches);

$Phone = implode('', $matches[0]);

编辑:实际上,这些数字并不是从这个函数中混乱的顺序 - 我将数字插入到一个int(10)数据库字段中,这导致了混乱。但是,下面的答案仍然是实现我的目标更有效的方法。

4个回答

5
使用preg_replace函数删除任何非数字字符:
$numbers = preg_replace('/[^\d]/','',$Phone);

注意:'[^\d]' 可以被 '\D' 替换(在非 Unicode 模式下是安全的)。

2
$Phone = preg_replace('/[^\d]/', '', $Phone);

2
为什么不直接替换字符串中除数字外的所有内容?
$number = preg_replace("/[^0-9]/", '', $Phone);

其他示例中使用的^\d和你的^0-9有什么区别? - Luke Shaheen
1
None. \d只是一个转义序列,与字符类[0-9]相同。一些转义序列取决于语言环境设置,但我不认为\d是这样的。请参阅http://www.php.net/manual/en/regexp.reference.escape.php。 - Jeff Lambert

0

试一下

if (!preg_match("/^[0-9\-]*$/",$Phone)) {
    echo "Only Numeric and strip (-)";
}

示例:

正确: 0877-9320-9356

错误: 0877 9320 9356087793209356


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接