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-我更新了我的答案。正如您现在看到的,所有的测试用例都被正确地替换了。