0

私のレールの単体テストでかなり奇妙なエラーが発生しています。何らかの理由で失敗する次のテストがあります。

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

私のモデルでの次の検証:

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

テストが失敗する理由についてのアイデアはありますか?

PS:正規表現で*を aに変更すると、エラーが消えたように見えます...しかし、なぜ!+

4

1 に答える 1

1

正規表現は、入力内の0個以上の単語文字に/[\w]*/一致します。テスト文字列には単語文字がないため、問題なく検証されます。一致するには少なくとも 1 つの単語文字が必要です。そのため、テスト文字列で機能します。/[\w]+/

文字列の最初から最後まで、単語の文字のみが必要であることを指定するために使用する必要があると思います/^[\w]*$/(特殊文字^$正規表現では、それぞれ入力の開始と終了に一致します)。これにより、空白の入力が許可されることに注意してください。

于 2013-03-02T21:09:05.990 に答える