我正在使用Ruby on Rails 3.0.9,我想验证一个只能包含字符(不包括特殊字符-不区分大小写),空格和数字的字符串。
在我的验证代码中:
validates :name,
:presence => true,
:format => { :with => regex } # Here I should set the 'regex'
我该如何表达正则表达式?
我正在使用Ruby on Rails 3.0.9,我想验证一个只能包含字符(不包括特殊字符-不区分大小写),空格和数字的字符串。
在我的验证代码中:
validates :name,
:presence => true,
:format => { :with => regex } # Here I should set the 'regex'
我该如何表达正则表达式?
有几种方法可以做到这一点。如果您只想允许ASCII单词字符(没有带重音的字符,如Ê或来自其他字母表的字符,如Ӕ或ל),请使用以下代码:
/^[a-zA-Z\d\s]*$/
如果您想在 Ruby 1.8.7 中仅允许来自其他语言的数字和字母,请使用以下代码:
/^(?:[^\W_]|\s)*$/u
如果你想在Ruby 1.9.x中仅允许来自其他语言的数字和字母,请使用以下代码:
^[\p{Word}\w\s-]*$
此外,如果你打算在Ruby on Rails中使用支持Unicode的1.9.x正则表达式,请在你的.rb文件开头添加这行代码:
# coding: utf-8
您正在寻找:
[a-zA-Z0-9\s]+
+
表示匹配一个或多个字符,因此它不会匹配空字符串。如果您需要匹配它们,可以使用*
代替+
。
_
。 - Justin Morganregex = ^[a-zA-Z\d\s]*$
\p{L}
版本。我没有检查这样一个短的正则表达式是我的疏忽。为什么\p{L}
不起作用?它在Ruby正则表达式中不支持吗?在.NET中它可以正常工作。 - Justin Morganu
标志,它应该匹配那些字符。在这里进行了测试:http://rubular.com/r/EMofPxqMXU。 - Justin Morgan