此RegEx仅适用于8位数的电话号码,如何使其适用于15位数?

时间:2012-08-08 16:36:26

标签: php regex

Stack Overflow中的某个人给了我这段代码:

$output = preg_replace( '/(\+?\d{2}|0)(\d{7,8})/', '0$2', $test);

它改变了用户输入:

  

+622112345进入02112345

     

622112345进入02112345

     

02112345进入02112345

不幸的是它仅适用于7-8位数。我决定将代码更改为:

$output = preg_replace( '/(\+?\d{2}|0)(\d{15})/', '0$2', $test);

(\d{7,8})更改为(\d{15}),我希望我可以让此RegEx最多验证15位数。但是,这就是我所拥有的:

input : 083812345678910 >> output : 083812345678910 [correct]

input : 6283812345678910 >> output : 6283812345678910 [false, should be : 083812345678910]

input : +6283812345678910 >> output : 6283812345678910 [false, should be : 083812345678910]

如何才能使这个数字适用于15位数?感谢。

更新:用户输入可以是10,11,12或甚至13位数。但不超过15位数。所以我需要这段代码来改变前缀:+62,62或0 INTO 0xxxx。无论他们有多少位数,最多15位。

1 个答案:

答案 0 :(得分:2)

正确的正则表达式是:

$output = preg_replace( '/(0|\+?\d{2})(\d{7,14})/', '0$2', $test);

即使您有16位数字,但在分机号码后最多只能有14位数字,以占2位数的分机号码。请注意,这将适用于62以外的其他扩展程序,如果不需要,请将\d{2}替换为62

Demo