可能是一个简单的正则表达式问题。
如何从电话号码中删除除+ +之外的所有非数字?
即。
012-3456 => 0123456
+1(234)56789 => 123456789
答案 0 :(得分:9)
/(?<!^)\+|[^\d+]+//g
将删除所有非数字并单独留下前导+
。请注意,前导空格将导致“单独保留+
”位失败。在.NET语言中,这可以在正则表达式中使用,在其他语言中,您应该在将字符串传递给此正则表达式之前先删除空格。
说明:
(?<!^)\+
:匹配+
,除非它位于字符串的开头。 (在.NET中,使用(?<!^\s*)\+
来允许前导空格。)
|
或
[^\d+]+
:匹配任何既不是数字也不是+
的字符。
之前(使用(?<!^\s*)\+|[^\d+]+
):
+49 (123) 234 5678
+1 (555) 234-5678
+7 (23) 45/6789+10
(0123) 345/5678, ext. 666
后:
+491232345678
+15552345678
+72345678910
01233455678666
答案 1 :(得分:2)
在Java中,你可以做到
public static String trimmed(String phoneNumber) {
return phoneNumber.replaceAll("[^+\\d]", "");
}
这将保留所有+
,即使它位于phoneNumber
的中间。如果您想删除中间的任何+
,请执行以下操作:
return phoneNumber.replaceAll("[^+\\d]|(?<=.)\\+", "");
(?<=.)
是一个lookbehind,用于查看+
之前是否有前一个字符。
System.out.println("[" + trimmed("+1 (234)++56789 ") + "]");
// prints "[+123456789]"
答案 2 :(得分:1)
如果支持全局正则表达式,您只需替换所有不是数字或加号的字符:
s/[^0-9+]//g
如果不支持全局正则表达式,您可以匹配尽可能多的可能数字组,这些数字组可能在您给定的电话号码格式中有效:
s/([0-9+]*)[^0-9+]*([0-9+]*)[^0-9+]*([0-9+]*)[^0-9+]*([0-9+]*)/\1\2\3\4/
答案 3 :(得分:1)
肯定可能在一个正则表达式中完成所有操作,但我更喜欢更简单的正则表达式,它将正确处理前导加上前导和尾随空格:
#!/usr/bin/perl
while (<DATA>) {
print "DATA Read: \$_=$_"; #\n already there...
s/\s*(.*)\s*/$1/g;
$s=s/(^\+){0,1}//?$1:'';
s/[^\d]//g;
print "Formatted: $s$_\n====\n";
}
__DATA__
012-3456
+1 (234) 56789
+1 (234) 56789
1234-56789 |
+12345+6789
输出:
DATA Read: $_=012-3456
Formatted: 0123456
====
DATA Read: $_=+1 (234) 56789
Formatted: +123456789
====
DATA Read: $_= +1 (234) 56789
Formatted: +123456789
====
DATA Read: $_=1234-56789 |
Formatted: 123456789
====
DATA Read: $_=+12345+6789
Formatted: +123456789
答案 4 :(得分:1)
如何从电话号码中删除除+ +之外的所有非数字?
从(
删除)
和+44 (0) 20 3000 9000
以及空格会导致无效的号码+4402030009000
。它应该是+442030009000
。
整理例程需要几个步骤来处理国家/地区代码(带或不带访问代码或+
)和/或中继代码和/或标点符号,可以单独使用,也可以任意组合使用。
答案 5 :(得分:0)
只需将除数字和+之外的所有内容替换为“
/[^\d+]/
在Python中,
>>> import re
>>> re.sub("[^\d+]","","+1 (234) 56789")
'+123456789'
>>>
答案 6 :(得分:0)
使用perl,
my $number = // set it equal to phone number
$number =~ s/[^\d+]//g
这仍然允许加号在任何地方,如果你想让它在开头只允许加号,我会把那部分留给你。你不能只给你整个答案,否则你就不会学习。
基本上现在做的是,它会替换$ number中不是数字的任何内容或带有空字符串的加号
答案 7 :(得分:-3)
您不能简单地删除“+”符号。它必须被视为'00'并且属于国家/地区代码。 '+ xx'与'00xx'相同。
无论如何,使用正则表达式处理电话号码就像用正则表达式解析html ......几乎不可能,因为有很多(正确的)拼写格式。
我的建议是编写一个自定义类来处理电话号码,而不是使用正则表达式。