【问题标题】:PHP - How to write a regex to check that a string only contains certain characters?PHP - 如何编写正则表达式来检查字符串是否仅包含某些字符?
【发布时间】:2012-10-11 19:19:28
【问题描述】:

我几乎没有编写正则表达式的经验。我将如何检查字符串是否只包含零、空格、连字符和冒号?谢谢!

【问题讨论】:

    标签: php regex string


    【解决方案1】:

    您应该使用简单的正则表达式(无前向查找)获得良好的性能:

    ^[0 :-]++$
    

    分解:

    • ^ 识别输入的开头
    • [] 表示括号内的任何字符匹配。
    • + 表示前面的(括号)必须匹配 1 次或多次。 ++ 变为 possesive,提高了性能。
    • $ 识别输入的结尾

    【讨论】:

    • @AlixAxel,你怎么看?我以前从未见过 ++ 运算符。
    • 谢谢。正则表达式如何区分用作之间含义的连字符(如在“a-z”中)和用作含义本身?
    • @JennyShoars:当它位于列表的开头/结尾时,- 只是另一个字符。
    • 是有道理的,但是否还有其他特殊字符需要这个特殊位置才能被认为只是它们的字符?那么你如何解决其中的多个问题呢?
    • @AlixAxel,啊!所以++ 的行为与+ 在 lex/flex 中的行为完全相同。每天学习新东西
    【解决方案2】:
    /^[0\s:-]+$/ 
    
    • ^ = 字符串开头
    • [0\s:-]+ = 一个或多个零、空格、连字符、冒号。 + 表示一个或多个\s 是任何空白字符,可能包括换行符和制表符。
    • $ = 字符串结束

    由于该模式锚定在^$ 之间,因此除了[] 字符类中的字符之外,不会匹配任何字符。

    如果您只允许文字空格而不是任何空白字符,请使用:

    /^[0 :-]+$/ 
    

    【讨论】:

      【解决方案3】:

      您可以使用范围。

      ^[0 \-:]{1,}$
      

      【讨论】:

      • {1,}+ 相同。此外,如果将 - 放在列表的开头或结尾,则无需转义它。
      • true 但你应该知道需要转义哪些字符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2011-02-16
      • 1970-01-01
      • 2015-03-15
      • 2012-02-19
      相关资源
      最近更新 更多