0

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 位。

4

1 回答 1

2

正确的正则表达式是:

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

即使您有 16 位数字,在分机号之后最多只能有 14 位数字,以说明 2 位分机号。请注意,这将适用于除 之外的更多扩展62,如果不需要,请替换\d{2}62.

演示

于 2012-08-08T16:43:58.600 回答