正则表达式 - 有条件替换

时间:2013-08-21 09:53:30

标签: c++ regex

我正在尝试使用regex来按国家/地区验证电话号码。 我按国家/地区制作电话格式,其中包含:

  • 验证正则表达式(例如:^(\+33|0)([1-9][0-9]{8})$)
  • 获取国际号码的转换(例如:+33$2
  • 获得国家号码的转换(例如:0$2

关于意大利,它变得棘手。

大多数电话号码都是这样的: “+39 123456789”=> “ 0 123456789”

但对于移动设备,它是: “+39 3 123456789”=> “ 3 123456789”

这意味着,要获取国内电话号码,我必须添加0,手机号码除外。

到目前为止,我只能通过2种手机格式实现它,一种用于移动电话,另一种用于其他手机。 它们是相互排斥的。

mobile =>

  • 验证正则表达式:^(\+393|3)([0-9]{9})$
  • 转换以获取国际号码:+393$2
  • 转换以获取国家号码:3$2

其他=>

  • 验证正则表达式:^(\+39|0)([0-9]{9})$
  • 转换以获取国际号码:+39$2
  • 转换以获取国家号码:0$2

有没有办法一次做?

电话样本:

  • 0123456789
  • 39123456789
  • 3123456789
  • 393123456789

1 个答案:

答案 0 :(得分:0)

复合表达式:

^(\+393|3|\+39|0)([0-9]{9})$

条件替换应该在代码中完成,具有bool成员变量,根据$1指定该数字是否是移动的。