仅包含字符(不包含特殊字符但包含重音符号字符)、空格和数字的字符串验证正则表达式。

3
我正在使用Ruby on Rails 3.0.9,我想验证一个字符串,该字符串只能包含字符(不区分大小写)、空格和数字。
更多要求:
- 不允许特殊字符(例如:!"£$%&/()=?^),除了"-"和"_"; - 允许重音字符(例如:à, è, é, ò, ...);
我从这个问题中了解到的正则表达式是^[a-zA-Z\d\s]*$,但它不能验证特殊字符和重音字符。
那么,我应该如何改进正则表达式呢?

当你说“characters”时,你是指“letters”吗?所有的字符串都包含字符。A、7、%和▲都是字符。 - Justin Morgan
提供的正则表达式不允许特殊字符 !"£$%&/()=?^... - Kirill Polishchuk
@Justin Morgan - 是的,我是指“字母”。对于我的含糊不清,我道歉。 - Backo
3个回答

3
我写了问题中提到的^(?:[^\W_]|\s)*$答案(如果我知道你想允许 _ 和 - 的话,实际上会有所不同)。由于我自己不是Ruby程序员,我没有意识到Ruby默认不使用Unicode进行正则表达式匹配。
很抱歉我缺乏Ruby经验。你需要使用u标志。 这将切换到Unicode(UTF-8),因此可以捕获重音符号等字符。 这是你需要的模式:
^[\w\s-]*$

这里是在Rubular上的实际效果。 我认为这应该能解决问题。

u标志对我的原始答案也有效,但那个不是为了允许_或-字符而设计的。


你的正则表达式'^[\w\s-]*$'也匹配了!,“,'等字符,而我不想匹配它们。 - Backo
@Backo - 不对,根据这个测试,这些字符不匹配\w只匹配字母、数字和_\s匹配空格,当在字符类的末尾使用时,-是一个字面上的连字符。 - Justin Morgan
@Backo - 这很奇怪...Rubular使用Ruby正则表达式引擎,所以我期望在Rubular上有效的任何内容都能对你起作用。你正在使用什么版本的Ruby?我不确定为什么它对你不起作用,但我唯一能想到的是你可能没有正确地应用'u'标志。你是否将/^[\w\s-]*$/u用作你的正则表达式语法? - Justin Morgan
@JustinMorgan 我认为你的解决方案在 Ruby 1.9.2 上不起作用。我选择直接将特殊字符添加到我的正则表达式中。例如 /^[a-zA-Z\sáÁéÉíÍóÓúÚüÜñÑ]*$/i - omrsin

0

类似于^[\w\s\-]*$的东西应该验证字符、空格、减号和下划线。


根据regular-expression.info的说法,带重音符号的字符在Ruby中不属于\w - stema
我在 http://rubular.com/ 上检查了正则表达式 - 它似乎可以工作,\w 也匹配带重音的字符。 - eugen

0

验证字符串仅限于不允许的字符。在本例中为 |、<、>、" 和 &。

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


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