仅包含字符(非特殊字符)、空格和数字的字符串的正则表达式验证

8

我正在使用Ruby on Rails 3.0.9,我想验证一个只能包含字符(不包括特殊字符-不区分大小写),空格和数字的字符串。

在我的验证代码中:

validates :name,
  :presence   => true,
  :format     => { :with => regex } # Here I should set the 'regex'

我该如何表达正则表达式?

3个回答

19

有几种方法可以做到这一点。如果您只想允许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

@ream88 - 谢谢;编辑后删除了\p{L}版本。我没有检查这样一个短的正则表达式是我的疏忽。为什么\p{L}不起作用?它在Ruby正则表达式中不支持吗?在.NET中它可以正常工作。 - Justin Morgan
1
@Justin Morgan - 对于在字符串中验证像à,è,é,ò等重音字符,怎么样? - Backo
@Backo - 如果你使用u标志,它应该匹配那些字符。在这里进行了测试:http://rubular.com/r/EMofPxqMXU。 - Justin Morgan
@Volte - 你介意详细说明一下吗? - Justin Morgan
@Volte - 这与这个问题并不相关。我们不知道他试图做什么。 - Justin Morgan

2

您正在寻找:

[a-zA-Z0-9\s]+

+表示匹配一个或多个字符,因此它不会匹配空字符串。如果您需要匹配它们,可以使用*代替+


@eugen - 那将允许_ - Justin Morgan

0
除了之前所说的,还可以将任何正则表达式分配给您的控制该变量,例如。
regex = ^[a-zA-Z\d\s]*$

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