【问题标题】:Regex to validate strings having only characters (without special characters but with accented characters), blank spaces and numbers正则表达式验证只有字符(没有特殊字符但有重音字符)、空格和数字的字符串
【发布时间】:2011-10-10 06:10:16
【问题描述】:

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

更多:

  • 不允许使用特殊字符(例如:!"£$%&/()=?^),-_ 除外;
  • 重音字符是允许的(例如:à、è、é、ò、...);

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

那么,我应该如何改进正则表达式?

【问题讨论】:

  • 当您说“字符”时,您的意思是“字母”吗?所有字符串都包含字符。 A、7、% 和 ▲ 都是字符。
  • 提供的正则表达式不允许特殊字符!"£$%&/()=?^...
  • @Justin Morgan - 是的,我的意思是“字母”。为我的含糊道歉。

标签: ruby regex validation


【解决方案1】:

我写了^(?:[^\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, 尽管它并不意味着允许 _ 或 - 字符。

【讨论】:

  • 你的正则表达式 '^[\w\s-]*$' 也匹配 !, ", ', ... 我不想匹配。
  • @Backo - Nope, according to this test, those characters don't match\w 仅匹配字母、数字和 _\s 匹配空格,- 在字符类末尾使用时是文字连字符。
  • @Backo - 这很奇怪......Rubular 使用 Ruby 正则表达式引擎,所以我希望任何适用于 Rubular 的东西都能为您工作。您使用的是哪个版本的 Ruby?我不确定为什么它对你不起作用,但我唯一能想到的是你可能没有正确应用 u 标志。您是否使用/^[\w\s-]*$/u 作为您的正则表达式语法?
  • @JustinMorgan 我认为您的解决方案不适用于 ruby​​ 1.9.2 我选择将特殊字符直接添加到我的正则表达式中。例如 /^[a-zA-Z\sáÁéÉíÍóÓúÚüÜñÑ]*$/i
【解决方案2】:

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

【讨论】:

  • 根据regular-expression.info,重音字符在Ruby中不是\w的一部分
  • 我检查了rubular.com 上的正则表达式 - 它似乎有效,\w 也匹配重音字符。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-09
    • 2015-10-01
    • 2023-02-14
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多