1

那里有任何正则表达式大师吗?我有一个 position_id 是一个字符串,可以有以下格式。位数可以非常多,但有点像这样。所有数字或数字和一个破折号“-”。

123456  or
123456-123

我需要一个正则表达式,如果 position_id 不是那种/那些格式,则抛出一个标志。我以为我有以下内容,但它似乎不起作用。也许我的语法是错误的。

if !params[:position_id] =~ /^\d+-?\d+$/
  flash[:error] = "error message here"
end

任何帮助,将不胜感激。

4

2 回答 2

1

只要您至少有 2 位数字,它就应该可以工作。我猜你是用 1 位数字来测试它吗?

如果是这样,应该这样做:

flash[:error] = "error message here" unless params[:position_id] =~ /^\d+(-\d+)?$/

我们在-123那里使整个可选

于 2013-04-04T18:13:43.317 回答
0

这是一个简单的:

^([0-9]*)(\-[0-9]*)?$

http://rubular.com/r/2qSTHIPeo9

如果您希望数字范围为一定长度,只需将其更改为:

^([0-9]{6})(\-[0-9]{3,4})?$

用文字说:

  • “任何 6 位数长的数字”
  • “如果有连字符,则第二个数字必须在 3 到 4 位之间”

http://rubular.com/r/5SHiJ1GKiK

编辑: - 回答下面的评论

if !params[:position_id].match(/^([0-9]{6})(\-[0-9]{3,4})?$/)
    flash[:error] = "not valid"
end

http://ruby-doc.org/core-2.0/String.html#method-i-match

于 2013-04-04T18:16:33.040 回答