可能重复:
A comprehensive regex for phone number validation
我来搞定这个。
1?\s*-?\s*(\d{3}|\(\s*\d{3}\s*\))\s*-?\s*\d{3}\s*-?\s*\d{4}它匹配了很多电话号码,但没有捕捉到这两个号码:
(123) 456-7890或123.456.7890
发布于 2011-02-09 22:04:14
不久前,我用字符串问了一个关于a regex for a certain number of digits的问题。答案给了我这个regex (\D*\d){10}{n}。
从那以后,我就一直用这个来验证电话号码。我不在乎他们给我的电话号码是什么格式,只要它包含10位数字。如果你只关心的是你得到区号+电话号码,那么这可能也适用于你。
发布于 2011-02-09 22:19:56
这是你原来的正则表达式的一个简化版本,它应该能满足你的要求。
1?[\s-(.]*?\d{3}[ -).]*?\d{3}[ -.]*?\d{4}发布于 2011-02-09 23:40:36
几个怪物
抓捕组1,2,3持有电话号码的部分。这是一个赤裸裸的验证。
任何事情都会变得像哥斯拉一样。
区号不需要
/^(?:\s*(?:1(?=(?:.*\d.*){10}$)\s*[.-]?\s*)?(?:\(?\s*(\d{3}|)\s*\)?\s*[.-]?))\s*(\d{3})\s*[.-]?\s*(\d{4})$/
所需区号
/^(?:\s*(?:1(?=(?:.*\d.*){10}$)\s*[.-]?\s*)?(?:\(?\s*(\d{3})\s*\)?\s*[.-]?))\s*(\d{3})\s*[.-]?\s*(\d{4})$/
代码示例(在Perl中)
use strict;
use warnings;
my $rxphone = qr/
^
(?: # Area code group (optional)
\s*
(?:
1 (?=(?:.*\d.*){10}$) # "1" (optional), must be 10 digits after it
\s* [.-]?\s*
)?
(?:
\(?\s* (\d{3}|) \s*\)? # Capture 1, 3 digit area code (optional)
\s* [.-]? # --- (999 is ok, so is 999)
)
) # End area code group
\s*
(\d{3}) # The rest of phone number
\s*
[.-]?
\s*
(\d{4})
$
/x;
my %phonenumbs = (
1 => '(123-456-7890',
2 => '123.456-7890',
3 => '456.7890',
4 => '4567890',
5 =>'(123) 456-7890',
6 => '1 (123) 456-7890',
7 => '11234567890',
8 => ' (123) 4565-7890',
9 => '1123.456-7890',
w => '1-456-7890',
);
for my $key ( sort keys %phonenumbs)
{
if ($phonenumbs{$key} =~ /$rxphone/) {
print "#$key => '$1' '$2' '$3'\n";
} else {
print "#$key => not a valid phone number: '$phonenumbs{$key}' \n";
}
}
__END__输出
#1 => '123' '456' '7890'
#2 => '123' '456' '7890'
#3 => '' '456' '7890'
#4 => '' '456' '7890'
#5 => '123' '456' '7890'
#6 => '123' '456' '7890'
#7 => '123' '456' '7890'
#8 => not a valid phone number: ' (123) 4565-7890'
#9 => '123' '456' '7890'
#w => not a valid phone number: '1-456-7890'
https://stackoverflow.com/questions/4950985
复制相似问题