只允许短划线和数字的正则表达式?

时间:2012-06-28 19:13:02

标签: ruby regex

只允许短划线和数字的正则表达式是什么?

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

我不希望条目如:--------------34--53-343现在还可以。

2 个答案:

答案 0 :(得分:7)

因此,在所述的问题中,您至少需要一个数字,否则为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+)*$/

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

答案 1 :(得分:3)

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

/^[0-9]([0-9]|-(?!-))+$/
  1. 以数字开头,
  2. 后跟数字或短划线前面没有短划线。可能多次(555-54-456有效,555--54-456不是)