我正在使用Ruby on Rails 3.0.9,我正在使用以下正则表达式来验证包含字母,空格和数字的字符串(如果我是对的,它应该匹配那些提到的字符):
/^[ws-]*$/u
我想改进regex也匹配一个字符串,可以包含"特殊"字符字母,例如,'
, "
, %
, &
, *
, @
, !
, ?
, (
, )
, [
和]
。我怎么能改变上面的正则表达式,以匹配那些?
我忘记了,在上面的表达式中,我想匹配validate也重音字母,如à
, è
, é
, ì
, ò
和ù
。
只需将额外的字符添加到字符类中,同时转义任何在正则表达式字符类(仅[
和]
在您的情况下)中具有特殊含义的字符:
/^[ws'"%&*@!?()[]-]*$/u
还要确保将-
放在字符类的末尾或转义(-
),以便regex解析器不会认为它指示了一个范围。
如果您还想加入Unicode "word"字符,则将w
替换为p{Word}
:
/^[p{Word}s'"%&*@!?()[]-]*$/
假设你使用的是1.9。如果你没有使用1.9,那么你应该升级以获得更好的Unicode支持。
Oniguruma的p{}
语法(Ruby的1.9 regex引擎)是一个命名属性,听起来像你在寻找"word"属性,所以p{Word}
是你的w
的替代品。你可能想用p{Space}
代替s
,而你在它:
/^[p{Word}p{Space}'"%&*@!?()[]-]*$/
关于Oniguruma语法的更多细节可以在这里找到:
http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt
可以转义特殊字符。这个正则表达式:[]
将匹配字符串"[]"
。
看看这个有用的网站:http://www.rubular.com/
你可以构建你的正则表达式并针对字符串测试它。
Edit只需开始将这些转义的特殊字符附加到您的regex中,就像这样:/^['"[]ws-]*$/u
在那里我已经附加了它,这样它现在也可以查找单个配额('),双引号(")和方括号([])的任何出现。如果你需要的话,可以继续添加。