【问题标题】:make characters optional in regular expression在正则表达式中使字符可选
【发布时间】:2011-01-09 18:30:01
【问题描述】:

我正在尝试验证其中没有多余字符的(美国)电话号码。所以格式是 1-555-555-5555,没有破折号、空格等,1 是可选的。但是,我的正则表达式只会排除带有前导 1 的数字,并且说没有它的数字是无效的。这是我使用的东西哪里出错了?

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

【问题讨论】:

  • 没有破折号或空格?您是否知道这样做会让用户更加困难(研究表明,人们使用长数字字符串比使用带有分隔符的短字符串更困难)?允许破折号和空格,并在输入时简单地将它们去掉。不要让用户做你的软件完全可以做的事情。您的用户会感谢您的。
  • 设计不取决于我,但我同意 :)

标签: java regex


【解决方案1】:

用途:

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

那个?表示“可选”。

【讨论】:

  • 啊好吧,出于某种原因,我认为括号是可选的。谢谢!
【解决方案2】:

你没有做任何事情来使 1 成为可选项。你已经把它放在一个组中,但仅此而已。你想要这个:

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

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

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

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

X? X,一次或一次都没有

【讨论】:

  • 感谢您的回答,将它交给丹尼尔,您有很多代表和徽章;-)
  • 你确实有很多代表和徽章:D
【解决方案3】:

使用这个"/^((\+?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。我希望这就是你要找的。​​p>

【讨论】:

  • 这与问题无关。
  • 我认为这个表达式足以验证美国的任何数字不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多