我正在尝试编写一个正则表达式来修改电话号码。如果它是国际号码(非美国),我希望+
保留该符号(%2B
在 URL 编码之后)。如果是国内号码,%2B
应该去掉,改成1
前面加a的11位格式。
4 个用例是:
%2B2125551000
变为0112125551000
(这应该被视为一个国际号码,因为它以+[2-9]
- 替换+
为开头011
)%2B12125551000
变成12125551000
(既然是+1
,那就是国内号码,去掉+
)2125551000
变成12125551000
(国内号码因为没有+
)12125551000
变成12125551000
(国内号码因为没有+
)
我一直在尝试在 Linux 上使用sed对此进行测试:
进行匹配的表达式是:
((%2B)|)?((1)|)?([0-9]{10})
但是,我不一定总是需要所有 5 个参数。如果字符串是 ,我只需要%2B
保留%2B[2-9]
。
$ for line in %2B2125551000 %2B12125551000 12125551000 2125551000;do echo $line | sed -r 's/^((%2B|))?((1)|)?([0-9]{10})/one:\1 two:\2 three:\3 four:\4 five:\5/';done
one:%2B two:%2B three: four: five:2125551000
one:%2B two:%2B three:1 four:1 five:2125551000
one: two: three:1 four:1 five:2125551000
one: two: three: four: five:2125551000