调用字符串“a?c”的正则表达式无效?

Regular expression that calls string "a?c" invalid?

提问人:Allan L. 提问时间:10/15/2008 最后编辑:Brad GilbertAllan L. 更新时间:10/16/2008 访问量:317

问:

在我的用户模型中,我有一个名为“昵称”的属性,并按如下方式进行验证:

validates_format_of :nickname, :with => /[a-zA-Z0-9]$/, :allow_nil => true

但是,它目前允许此字符串作为有效传递:

a?c

我只想接受字母数字字符串 - 有谁知道为什么我的正则表达式失败?如果有人能提出一个更好的正则表达式,我全都听进去。

正则表达式 验证

评论

1赞 Ben Doom 10/15/2008
如果你很好奇,你的正则表达式会说最后一个字符必须是字母数字。
0赞 Brad Gilbert 10/16/2008
删除标签,这个问题中没有任何内容真正指的是 rails 甚至 ruby。rails

答:

10赞 Robert Gamble 10/15/2008 #1

您需要在两侧锚定模式:

/^[a-zA-Z0-9]+$/

评论

0赞 Joel Coehoorn 10/15/2008
这仅限于一个角色。
0赞 Allan L. 1/5/2009
罗伯特,我很抱歉没有把你的答案标记为我之前接受的答案。我没有意识到我所要做的就是点击复选标记。再次,我深表歉意。
17赞 Joel Coehoorn 10/15/2008 #2

如果字符串以有效字符结尾,则该字符串将匹配 true。没有对中间的任何内容进行验证。试试这个:

^[a-zA-Z0-9]*$

评论

0赞 Dan 10/15/2008
你可能想要一个 + 而不是一个 *,因为它将匹配一个空字符串。
0赞 Allan L. 10/15/2008
“$”前面的“*”解决了所有问题。我以前在那里有“^”,但我把它拿出来了,因为它有助于通过我的一些规格。非常感谢您如此迅速地回复!
0赞 Joel Coehoorn 10/15/2008
我考虑过 +,但原始问题的一部分是“allow_nil:true”,这向我表明空字符串应该没问题。