Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 此正则表达式仅适用于8位电话号码,如何使其适用于15位?_Php_Regex - Fatal编程技术网

Php 此正则表达式仅适用于8位电话号码,如何使其适用于15位?

Php 此正则表达式仅适用于8位电话号码,如何使其适用于15位?,php,regex,Php,Regex,堆栈溢出中的某个人给了我以下代码: $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); 通过将(\

堆栈溢出中的某个人给了我以下代码:

$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})
,我希望可以让这个正则表达式最多验证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更改为0xxxx。无论它们有多少个数字,最多15个。

正确的正则表达式是:

$output = preg_replace( '/(0|\+?\d{2})(\d{7,14})/', '0$2', $test);
即使您有16位数字,但分机后最多只能有14位数字,以说明2位分机。请注意,这将适用于除
62
以外的更多扩展,如果不需要,请将
\d{2}
替换为
62


等等,您需要它最多15位有效还是正好15位有效?{15} 正好是15。{7,15}的意思是7到15位(包括7到15位)。你的代码应该做什么?@BlackPlanet:检查我的更新。我在我的帖子上添加了一些新信息。having
(\d{7,14})
给了我错误的结果:输入:08381234567810,输出:03812345678910(缺少8,应该是08381234567810)@RobertHanson-我更新了我的答案。正如您现在看到的,所有的测试用例都被正确地替换了。