使用正则表达式验证逗号分隔单词字符串的格式

dek*_*n88 1 ruby regex format validation ruby-on-rails

我正在尝试使用正则表达式验证 ruby​​ 类中文本字段中的一串逗号分隔的单词。以下内容应该有效:

word

word, word, word

word,word,word
Run Code Online (Sandbox Code Playgroud)

并且以下内容应该是无效的:

word word word
Run Code Online (Sandbox Code Playgroud)

我以为这会起作用

/([a-z]+){1}(,\s*[a-z]+)*/i
Run Code Online (Sandbox Code Playgroud)

在 Rubular 上,它似乎是有效的,但是当我在类中进行如下验证时,它接受应该是无效的字符串。

@tag_regex = /([a-z]+){1}(,\s*[a-z]+)*/i

validates :tags, 
:allow_blank => true,
:format => { :with => @tag_regex, :message => "Invalid tag format." }
Run Code Online (Sandbox Code Playgroud)

我不确定我的问题是否在于正则表达式或验证方法本身。任何帮助表示赞赏。

Ani*_*dha 5

您忘记使用^(字符串的开头)和$(字符串的结尾)

所以,应该是

/^([a-z]+)(,\s*[a-z]+)*$/i
Run Code Online (Sandbox Code Playgroud)

如果没有^$它将匹配字符串之间的任何位置^。如果使用,$则可以使其完全匹配