2013-03-02 98 views
0

我在轨道单元测试中出现了相当奇怪的错误。 我有以下的测试,由于某种原因失败:失败的名字和姓氏正则表达式测试

should_not allow_value('@!>::<>').for(:first_name) 

和下面的验证在我的模型:

validates_format_of :first_name, :last_name, with: (/[\w]*/), allow_blank: true 

任何想法,为什么测试失败?

PS:错误似乎当我改变了*+在正则表达式...但为什么走开!

回答

1

正则表达式/[\w]*/匹配或更多单词字符在输入中。由于测试字符串中没有单词字符,因此很高兴验证它。 /[\w]+/至少需要一个单词字符才能匹配,这就是为什么它可以与您的测试字符串一起工作。

我认为你应该使用/^[\w]*$/指定从字符串结尾开始,你只需要文字字符(特殊字符^$比赛开始和输入结束,分别在正则表达式)。请注意,这允许空白输入。

+0

是的,我刚刚在您发布的regular-expressions.info上阅读它。谢谢您的回答。 – foklepoint 2013-03-02 21:10:27

+0

你应该使用'\ A'和'\ z',而不是'^'和'$'。前者是**输入**的开始和结束,而后者是**行**的开始和结束,所以例如名称“Bob \ nDole”会快乐地匹配'^ \ w + $',但是将不匹配'\ A \ w + \ z'。 – charleyc 2013-03-02 21:38:32