【问题标题】:How do I use preg_match to test for spaces?如何使用 preg_match 测试空格?
【发布时间】:2010-11-25 23:28:49
【问题描述】:

我将如何使用 PHP 函数 preg_match() 来测试字符串以查看是否存在空格?

示例

“这句话将被测试为空格”

“thisOneWouldTestFalse”

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    如果您对任何空白(包括制表符等)感兴趣,请使用\s

    if (preg_match("/\\s/", $myString)) {
       // there are spaces
    }
    

    如果您只对空格感兴趣,那么您甚至不需要正则表达式:

    if (strpos($myString, " ") !== false)
    

    【讨论】:

    • 您的 strpos 参数设置错误。应该是: if (strpos($myString, " ") !== false)
    • @ncatnow,感谢您的提醒。那已经坐在那里,错误的,将近一年了。 :p
    • 你知道解释 \s \b \\S etc 的文档的链接在哪里吗?
    • @nickf: 你能告诉我为什么我们不能使用 preg_match("/\s/", $myString) 代替 "/\\s/"。会有什么不同?
    • @joHN 因为在双引号内 \ 用于转义特殊字符(例如 \n 换行符)。因此,您必须转义斜线(通过添加第二个 ),以便 PHP 将其视为文字斜线。老实说,一个更好的方法是简单地用单引号将字符串括起来,除非您需要从双引号中获得的附加功能。所以简而言之,你可以使用/\s/,只要你把它用单引号括起来,比如preg_match('/\s/', $myString)
    【解决方案2】:

    另请参阅解决此问题的 this StackOverflow question

    并且,根据您是否要检测制表符和其他类型的空白,您可能需要查看诸如 \b \w 和 [:SPACE:] 之类的 perl 正则表达式语法

    【讨论】:

    • \b 可能无济于事,因为它将匹配字符串的开头和结尾:例如preg_match("/\\b/", "abc") == true
    • 好点,我只是在想“单词边界”,不记得它会在结尾匹配。
    【解决方案3】:

    你可以使用:

    preg_match('/[\s]+/',.....)
    

    【讨论】:

      【解决方案4】:
      [\\S]
      

      大写 - 'S' 肯定会起作用。

      【讨论】:

        【解决方案5】:

        为此目的使用 ctype_graph 怎么样?这将扩大空间的范围以表示任何“空白字符”也不会打印屏幕上可见的任何内容(如 \t, \n )。 不过这是原生的,应该比 preg_match 更快。

        $x = "string\twith\tspaces" ;
        if(ctype_graph($x))
            echo "\n string has no white spaces" ;
        else
            echo "\n string has spaces" ;
        

        【讨论】:

          【解决方案6】:

          使用更快:

          strstr($string, ' ');

          【讨论】:

            【解决方案7】:

            我们也可以使用这个表达式检查空格:

            /\p{Zs}/
            

            测试

            function checkSpace($str)
            {
                if (preg_match('/\p{Zs}/s', $str)) {
                    return true;
                }
                return false;
            }
            
            var_dump((checkSpace('thisOneWouldTestFalse')));
            var_dump(checkSpace('this sentence would be tested true for spaces'));
            
            

            输出

            bool(false)
            bool(true)
            

            如果您希望简化/更新/探索表达式,已在regex101.com 的右上角面板中进行了说明。如果您有兴趣,可以在this debugger link 中观看匹配步骤或修改它们。调试器演示了a RegEx engine 如何逐步使用一些示例输入字符串并执行匹配过程。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-04-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-05-04
              相关资源
              最近更新 更多