【问题标题】:How can I write a regex in Ruby that will determine if a string meets this criteria?如何在 Ruby 中编写一个正则表达式来确定一个字符串是否符合这个标准?
【发布时间】:2011-11-09 06:37:37
【问题描述】:

如何在 Ruby 1.9.2 中编写一个正则表达式来确定一个字符串是否符合这个标准:

  • 只能包含字母、数字和- 字符
  • 不能为空字符串,即长度不能为 0
  • 必须至少包含一个字母

【问题讨论】:

  • 第二个标准是多余的(已经被第三个覆盖了)。

标签: ruby regex


【解决方案1】:
/\A[a-z0-9-]*[a-z][a-z0-9-]*\z/i

是这样的

  • 字符串开头
  • 一些(或零个)字母、数字和/或破折号
  • 一封信
  • 一些(或零个)字母、数字和/或破折号
  • 字符串结束

【讨论】:

    【解决方案2】:

    我想这两个会帮助你:/\A[a-z0-9\-]{1,}\z/i/[a-z]{1,}/i。第一个检查前两个规则,第二个检查最后一个条件。

    【讨论】:

      【解决方案3】:

      没有正则表达式:

      str.count("a-zA-Z") > 0 && str.count("^a-zA-Z0-9-") == 0
      

      【讨论】:

        【解决方案4】:

        您可以查看this 教程,了解如何在 ruby​​ 中使用正则表达式。关于您需要的内容,您可以使用以下内容:

        ^[A-Za-z0-9\-]+$
        

        ^ 将指示正则表达式引擎从字符串的最开头开始匹配。

        [..] 将指示正则表达式引擎匹配它们包含的任何一个字符。

        A-Z 表示任意大写字母,a-z 表示任意小写字母,0-9 表示任意数字。

        \- 将指示正则表达式引擎匹配-。前面使用\,因为正则表达式中的-是一个特殊符号,所以需要转义

        $ 将指示正则表达式引擎在行尾停止匹配。

        + 指示正则表达式引擎一次或多次匹配方括号之间的内容。

        您还可以使用\i 标志使您的搜索不区分大小写,因此正则表达式可能会变成这样:

        ^[a-z0-9\-]+/i$
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-17
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多