正则表达有帮助

时间:2011-01-28 19:14:08

标签: php regex

我正在尝试在php中编写一个正则表达式来检查以确保传入的字符串是三件事之一,但是我很难(我真的很难用正则表达式)。

我需要确保我收到的参数包含这三件事之一,而不是其他内容:

  1. “|”这只是一个管道或
  2. “”,这只是一个空字符串OR
  3. “| 1 | 534 | 3453 | 23 | 213 | 2 |”一个长字符串,它使用管道作为一系列数字的分隔符
  4. 感谢您的帮助(这对我来说一直是一个问题,我想我需要专门购买一本关于正则表达式的书)

3 个答案:

答案 0 :(得分:2)

preg_match('/^(?:\|(?:\d+\|)*)?$/', $input);

答案 1 :(得分:1)

最简单的方法是将其分成三个单独的检查:

  1. 该字符串只是一个管道(strcmp($str,"|") == 0
  2. 该字符串为空(strlen($str) == 0)。
  3. 该字符串与正则表达式/^[0-9\|]+$/
  4. 匹配

    通过尝试将所有这些检查塞入一个正则表达式,不要让它变得比它更难。您的代码将更容易理解,代码的未来维护者将感谢您。

    编辑:只是为了显示我正在谈论的内容,这里有一些示例代码:

    if( strcmp($str,"|") == 0 ||
        strlen($str) == 0     ||
        preg_match('^[0-9\|]+$', $str) {
      ...
    }
    

    VS

    if( preg_match('/^(?:\|(?:\d+\|)*)?$/', $str ) {
      ...
    }
    

    如果...为空,哪一个会执行$str

答案 2 :(得分:0)

(^(\ |)([0-9 \ |] {0,})(\ |)$)|(^(\ |)$)|()

使用上面的正则表达式,如果没有算术你的字符串无效,则其他有效,并尝试检查空如果str_len($ string)> 0然后检查正则表达式