Ruby on rails 名字和姓氏正则表达式测试失败

Ruby on rails 名字和姓氏正则表达式测试失败,ruby-on-rails,regex,unit-testing,Ruby On Rails,Regex,Unit Testing,我在rails的单元测试中遇到了一个非常奇怪的错误。 我的以下测试因某种原因失败: should_not allow_value('@!>::<>').for(:first_name) 关于为什么测试失败有什么想法吗 PS:当我在正则表达式中将*更改为+时,错误似乎消失了……但是为什么呢 正则表达式/[\w]*/匹配输入中的零个或多个单词字符。因为测试字符串中没有单词字符,所以它很乐意验证它/[\w]+/至少需要一个单词字符才能进行匹配,这就是它与测试字符串一起工作的原因 我

我在rails的单元测试中遇到了一个非常奇怪的错误。 我的以下测试因某种原因失败:

should_not allow_value('@!>::<>').for(:first_name)
关于为什么测试失败有什么想法吗


PS:当我在正则表达式中将
*
更改为
+
时,错误似乎消失了……但是为什么呢

正则表达式
/[\w]*/
匹配输入中的零个或多个单词字符。因为测试字符串中没有单词字符,所以它很乐意验证它<代码>/[\w]+/至少需要一个单词字符才能进行匹配,这就是它与测试字符串一起工作的原因


我认为您应该使用
/^[\w]*$/
来指定从字符串的开头到结尾,您只需要单词字符(特殊字符
^
$
分别在正则表达式中匹配输入的开头和结尾)。请注意,这允许空白输入。

是的。.我只是在您发布的regular-expressions.info上阅读了它。谢谢您的回答。您应该实际使用
\A
\z
,而不是
^
$
。前者是输入的开始和结束,而后者是行的开始和结束,因此,例如,名称
“Bob\nDole”
将愉快地匹配
^\w+$
,但不会匹配
\A\w+\z
validates_format_of :first_name, :last_name, with: (/[\w]*/), allow_blank: true