rails中的正则表达式匹配[\ w]和“ - ”而不是数字

时间:2010-07-02 07:01:22

标签: ruby-on-rails ruby regex

我想为名字验证编写正则表达式。 正则表达式应包括所有字母(拉丁/法语/德语字符等)。但是,我想从中排除数字,并允许-。 所以基本上它是\w(减号)数字(加号)-

请帮忙。

3 个答案:

答案 0 :(得分:6)

^[\p{L}-]+$

\p{L}匹配any kind of letter from any language

答案 1 :(得分:5)

据我所知,Ruby不支持Unicode属性(至少在1.8版本之前),因此您可能需要使用

^(?:[^\W\d_]|-)+$

说明:[^\W\d_]匹配任何字母(字面意思是“匹配一个既不是非字母数字字符,也不是数字或下划线的字符”)。在这种情况下,双重否定是正确的使用方法。由于我们使用的是否定字符类,因此我们需要通过交替允许-

警告:regular-expressions.info来看,Ruby看起来只匹配带有\w简写的ASCII字符,因此这个正则表达式可能无法正常工作。我没有在这里安装Ruby,但在rubular.com上这个正则表达式工作正常。

备用解决方案

^[[:alpha:]-]+$

应该根据regular-expressions.info和RegexBuddy匹配非ASCII字符,但是在rubular.com上它不起作用。

答案 2 :(得分:0)

如果您想要针对验证问题的特定于ruby的解决方案,那么您可以使用:

^[\D-]+$

您可以在此处查看此永久链接:

http://rubular.com/r/VrAIB4TkwJ

我已将其设为社区维基,以便每个人都可以尝试并在需要时更好地使用正则表达式。

希望这会有所帮助。干杯:)