2011-07-21 227 views
3

我on Rails的3.0.9使用Ruby只有字符(无特殊字符,但重音字符)的字符串,空格和数字,我想验证只能包含字符(不区分大小写字符的字符串),空格和数字。正则表达式验证

更多:

  • 特殊字符允许的(如:“£$%& /()= ^!?),除了-_;
  • 重音符号允许(例如:A,E,E,O,...);

,我从this question知道正则表达式是^[a-zA-Z\d\s]*$但这种做不验证特殊字符和重音字符。

所以,我应该如何提高正则表达式?

+0

当你说 “?,<,>,字符”,你的意思是 “字母” 的所有字符串包含字符A,7%和▲都是。字符 –

+0

提供的正则表达式不允许特殊字符'!“£$%&/()=?^'... –

+0

@Justin Morgan - 是的,我的意思是”字母“。为我的模糊而道歉。 – Backo

回答

3

我写的^(?:[^\W_]|\s)*$ answer in the question you referred to(这实际上会有所不同,如果我早知道你想允许_和 - )。不是我自己的Ruby人,我没有意识到Ruby默认不使用Unicode进行正则表达式匹配。

对不起,我缺乏Ruby的经验。 What you want to do is use the u flag.切换到Unicode(UTF-8),因此重音字符被捕获。 这里有你想要的图案:

^[\w\s-]*$ 

And here it is in action at Rubular.这应该做的伎俩,我想。

u标志works on my original answer as well,虽然是一个并不意味着允许_或 - 字符。

+0

你的正则表达式'^ [\ w \ s - ] * $'也匹配!,“,',...我不想匹配 – Backo

+0

@Backo - [根据这个测试, '\ w'只能匹配字母,数字和'_','\ s'匹配空格,'-'是一个字母连字符 –

+0

你的代码仍然不适用于重音字母 – Backo

0

喜欢的东西^[\w\s\-]*$应该验证字符,空格,减号和下划线。

+0

重音字符是红宝石不是'\ w'根据[regular-expression.info](http://www.regular-expressions.info/refflavors.html) – stema

+0

我检查了正则表达式在http部分:// rubular .com/- 它似乎有效,\ w也匹配重音字符。 – eugen

0

验证字符串仅适用于不允许的字符。在这种情况下,|“和&

^[^|<>\"&]*$