这应该很简单,但至少对我来说不是:(
我有这样的验证:
validates :l_name, format: { with: /\b[A-Z][a-z]+\b/ }
我的目标是验证给定字符串的每个单词。所以如果我设置我的l_name:" Cow Milk"它应该通过,但是当我通过时:"牛奶"或"牛奶"我希望它返回错误。但是现在验证通过,只要至少有一个大写字。
在正则表达式控制台中它看起来不错。
答案 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]*)*$
。