验证以确保不允许使用特殊字符。

9

如何在我的模型中验证:title,以便只接受字母a-z、A-Z和0-9?

  validates :title, :format => { with: REGULAR EXPRESSION , :message => 'no special characters, only letters and numbers' }

正则表达式应该是什么?

哦,我明白了,我错过了那个 :D - Dalorzo
1个回答

12
正则表达式应为/^[a-zA-Z0-9]*$/ 基本上您定义了三个允许的符号范围,首先是a-z,然后是A-Z,最后是0-9。
最后的星号表示需要匹配之前指定的字符零次或多次,这意味着空标题将被允许。如果您想要至少一个字符,请使用+而不是*。或者,如果您想要超过三个字符,请使用{3,}而不是星号。

1
这会验证一个空标题吗? - Hunter McMillen
2
/\w/ 允许下划线。 - Lukas_Skywalker
1
或者是/[^\W_]+/ - Santhosh
1
感谢 @Lukas_Skywalker,如果您想使用 $ 锚点,还需要添加 :multiline => true。 - user3646037
6
您应该使用 /\A[a-zA-Z0-9]*\z/。如果您仅使用 ^...$,它将只验证字符串的第一行,例如 "asdffs\n$&" =~ /^[a-zA-Z0-9]*$/ 将返回 0 并且条件将通过。使用 \A...\z 后,它看起来像 "asdffs\n&" =~ /\A[a-zA-Z0-9]*\z/ 并返回 nil。因此,除非您只想测试字符串的第一行,请不要使用 ^...$ - edariedl
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接