【问题标题】:This RegEx Works Only For 8 Digits Phone Number, How To Make It Works For 15 Digits?此 RegEx 仅适用于 8 位电话号码,如何使其适用于 15 位?
【发布时间】:2013-08-11 08:19:50
【问题描述】:

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

【问题讨论】:

  • 等等,您需要它最多有效 15 位还是正好 15 位? {15} 表示正好是 15。{7,15} 表示 7 到 15 位(含)之间。
  • 你的代码应该做什么?
  • @BlackVegetable :检查我的更新。我在帖子中添加了一些新信息。

标签: php regex


【解决方案1】:

正确的正则表达式是:

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

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

Demo

【讨论】:

  • 拥有(\d{7,14}) 给了我错误的结果:输入:083812345678910,输出:03812345678910(缺少 8,应该是 083812345678910)
  • @RobertHanson - 我更新了我的答案。正如您在this demo 中看到的那样,现在所有测试用例都已正确替换。
猜你喜欢
  • 1970-01-01
  • 2022-10-02
  • 2014-12-30
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多