我在rails的单元测试中遇到了一个奇怪的错误。 我有以下测试由于某种原因失败:
should_not allow_value('@!>::<>').for(:first_name)
以及我模型中的以下验证:
validates_format_of :first_name, :last_name, with: (/[\w]*/), allow_blank: true
关于测试失败原因的任何想法?
PS:当我在正则表达式中将*
更改为+
时,错误似乎消失了......但为什么!
答案 0 :(得分:1)
正则表达式/[\w]*/
匹配输入中的零或更多单词字符。由于测试字符串中没有单词字符,因此可以愉快地验证它。 /[\w]+/
需要至少一个单词字符才能匹配,这就是为什么它适用于您的测试字符串。
我认为你应该使用/^[\w]*$/
来指定从字符串的开头到结尾,你只需要单词字符(特殊字符^
和$
匹配开头和正则表达式中的输入结束。请注意,这允许空白输入。