【问题标题】:a simple regexp validator一个简单的正则表达式验证器
【发布时间】:2009-01-24 20:45:48
【问题描述】:

我如何创建具有这些简单规则的验证器。如果

表达式是有效的

必须以字母开头
它必须以字母结尾
它可以包含破折号(减号),但不能包含在表达式的开头或结尾

【问题讨论】:

  • 您应该指定开始和结束之间的部分的外观。
  • 对……换句话说,除了中间有破折号的可能性之外,整个东西应该是字母吗?
  • 这太模糊了。破折号和字母之间可以有任何东西,只要它以字母开头和结尾吗?还是只有开头和结尾的字母和可能的破折号?这会将字符串的长度限制为 2 或 3 个字符。

标签: ruby-on-rails regex


【解决方案1】:
^[a-zA-Z]+-?[a-zA-Z]+$

例如

def validate(whatever)
  reg = /^[a-zA-Z]+-?[a-zA-Z]+$/
return (reg.match(whatever)) ? true : false;
end

【讨论】:

    【解决方案2】:
    /^[A-Za-z]+(-?[A-Za-z]+)?$/
    

    这似乎是你想要的。

    ^ = 匹配起始位置
    ^[A-Za-z]+ = 起始位置后跟任何至少一个或多个字母。
    -? = 是否有零个或一个连字符(如果一行中可以有多个连字符,请使用“*”)。
    [A-Za-z]+ = 连字符后跟一个或多个字母
    (-?[A-Za-z]+)? = 对于只有一个字母的情况。
    $= 匹配字符串中的结束位置。

    【讨论】:

      【解决方案3】:

      xmammoth 几乎明白了,只是有一个小问题。我的解决方案是:

      ^[a-zA-Z]+\-?[a-zA-Z]+$
      

      请注意,原始问题指出,它可以包含破折号。破折号后需要问号,以确保它在正则表达式中是可选的。

      【讨论】:

      • 但是破折号前的反斜杠是不需要的。
      【解决方案4】:
      ^[A-Za-z].*[A-Za-z]$
      

      换句话说:字母,任何东西,字母。

      可能还想要:

      ^[A-Za-z](.*[A-Za-z])?$ 
      

      这样一个字母也可以匹配。

      【讨论】:

        【解决方案5】:

        我的意思是,能够创建标签。例如:“Wild-things”或“something-wild”或“into-the-wild”或“in-wilderness”“my-wild-world”等...

        【讨论】:

        • 您可以编辑您的帖子。打开帖子,然后点击问题下方和左侧的“编辑”。
        【解决方案6】:

        此正则表达式匹配由一个或多个字母组成的序列,这些单词由破折号连接。

        ^[a-zA-Z]+(?:-[a-zA-Z]+)*$
        

        【讨论】:

          【解决方案7】:

          嗯,

          [A-Za-z].*[A-Za-z]
          

          根据您的规则,这将起作用。它将匹配任何内容:

          • 以字母开头
          • 以字母结尾
          • 可以在中间包含一个破折号(除其他外)。

          【讨论】:

            猜你喜欢
            • 2016-03-07
            • 1970-01-01
            • 1970-01-01
            • 2022-11-30
            • 1970-01-01
            • 2014-04-27
            • 1970-01-01
            • 1970-01-01
            • 2011-08-08
            相关资源
            最近更新 更多