2

什么是只允许破折号和数字的正则表达式?

一个很好的例子是在电话号码中使用。例如 555-555-555、12-2314-425。

我不想要这样的条目:-------------虽然但-34--53-343现在很好。

4

2 回答 2

9

因此,在上述问题中,您至少需要一位数字,否则需要 0-9 或破折号中的任何一个。

/^[\d-]*\d[\d-]*$/

%w{555-555-555 12-2314-425 -34--53-343 -------------}.each{|s| puts "#{s} #{s.match(/^[\d-]*\d[\d-]*$/) ? 'does' : 'does not'} match"}

555-555-555 does match
12-2314-425 does match
-34--53-343 does match
------------- does not match

如果您尝试识别电话号码,您可能想要识别数字序列的东西,可选地用单破折号分隔,请尝试以下操作:

/^\d+(?:-\d+)*$/

其中不包括前导或尾随破折号和双破折号。

于 2012-06-28T19:16:55.393 回答
3

不知道红宝石,但我认为正则表达式是:

/^[0-9]([0-9]|-(?!-))+$/
  1. 以数字开头,
  2. 后跟一个数字,或前面没有破折号的破折号。可能多次(555-54-456有效,555--54-456无效)
于 2012-06-28T19:16:34.030 回答