在正则表达式中使字符可选

时间:2011-01-09 18:30:01

标签: java regex

我正在尝试验证其中没有多余字符的(美国)电话号码。因此格式为1-555-555-5555,没有短划线,空格等,1是可选的。但是,我的正则表达式只有前导1的数字和没有它的数字都是无效的。我正在使用的是哪里出错了?

"^(1)\\d{10}$"

3 个答案:

答案 0 :(得分:32)

使用:

"^1?\\d{10}$"

?意为“可选”。

答案 1 :(得分:14)

你没有做任何事情来制作 1个可选项。你把它放在一个组中,但就是这样。你想要这个:

"^1?\\d{10}$"

基本上说匹配(按此顺序):

  • 字符串的开头
  • 可选字符“1”
  • 正好十位数
  • 字符串的结尾

查看documentation for Pattern了解更多详情。例如,“贪婪量词”部分中列出?,如下所示:

  

X? X,一次或根本不是

答案 2 :(得分:2)

使用此"/^((\+?1-[2-9]\d{2}-[2-9]\d{2}-\d{4})|(\([2-9]\d{2}\)(\s)?[2-9]\d{2}-\d{4}))$/"它将仅允许美国允许的号码,包括“1-xxx-xxx-xxxx”,“+ 1-xxx-xxx-xxxx”,(xxx)xxx-xxxx。我希望这就是你要找的东西。