如何分别验证Rails中的每个单词?
How to validate each word separately in Rails?
这应该很容易,但事实并非如此,至少对我来说 :(
我有这样的验证:
validates :l_name, format: { with: /\b[A-Z][a-z]+\b/ }
我的目标是验证给定字符串的每个单词。因此,如果我设置我的 l_name: "Cow Milk" 它应该通过,但是当我通过时: "cow Milk" 或 "Cow milk" 我希望它成为 return 错误。但目前只要至少有一个大写单词,验证就会通过。
不过在正则表达式控制台中它看起来不错。
^([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]*)*$
.
这应该很容易,但事实并非如此,至少对我来说 :(
我有这样的验证:
validates :l_name, format: { with: /\b[A-Z][a-z]+\b/ }
我的目标是验证给定字符串的每个单词。因此,如果我设置我的 l_name: "Cow Milk" 它应该通过,但是当我通过时: "cow Milk" 或 "Cow milk" 我希望它成为 return 错误。但目前只要至少有一个大写单词,验证就会通过。
不过在正则表达式控制台中它看起来不错。
^([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]*)*$
.