如何在Rails中单独验证每个单词?

时间:2015-10-17 09:03:42

标签: ruby-on-rails regex validation format

这应该很简单,但至少对我来说不是:(

我有这样的验证:

validates :l_name, format: { with: /\b[A-Z][a-z]+\b/ }

我的目标是验证给定字符串的每个单词。所以如果我设置我的l_name:" Cow Milk"它应该通过,但是当我通过时:"牛奶"或"牛奶"我希望它返回错误。但是现在验证通过,只要至少有一个大写字。

在正则表达式控制台中它看起来不错。

1 个答案:

答案 0 :(得分:0)

^([A-Z][a-z]*)+( [A-Z][a-z]*)*$

<强>解释

第一部分^([A-Z][a-z]*)确保字符串以大写单词^开始[A-Z],其中单词也可以是单个大写字符,[a-z]*表示a至z中的0或更多。

第二部分( [A-Z][a-z]*)*$检查由空格( [分隔的其他大写单词。但是这些单词是)*表示的可选项,表示0或更多这样的单词。 $确保直到字符串结尾的所有单词都大写。例如,如果没有$,这也会匹配Cow milk in my coffee

最后+是必要的,因为它表示1或更多,但因为我们在字符串的开头只能有一个大写单词,我们不需要它。所以这 也将有效^([A-Z][a-z]*)( [A-Z][a-z]*)*$