在PHP中使用substr检查字符串是否包含多个字符


Check if a string contains several chars using substr in PHP

我需要检查一个字符串是否有几个键。有没有办法让它比下面的代码更简单:

$flag = substr($serial, 0, 1) == 'D' || substr($serial, 0, 1) == '1' || substr($serial, 0, 1) == 'B' || substr($serial, 0, 1) == 'E' ||substr($serial, 0, 1) == 'X' || substr($serial, 0, 1) == 'Z';

我需要一些类似下面(无效)例子的东西。注意,我需要检查这些键(D、1、B等)是否存在于$serial字符串的第一个位置。

$flag = substr($serial, 0, 1) in ('D','1','B','E','X','7');

谢谢!

  1. 您可以使用[]表示法访问子字符串
  2. in_array

样品:

$flag = in_array($serial[0], ['D','1','B','E','X','7']);

替代方案,因为这允许非常复杂的表达式,我认为你可能无论如何都需要:

preg_match($serial, '/^[D1BEX7]/')

请参阅http://regular-expressions.info.

我个人也会为此使用正则表达式,因为它相对简洁:

preg_match("/^[D1BEX7]/", $serial)

但是,如果您想使用低级字符串函数,strcspn提供了一个合适的替代方案:

!strcspn($serial, "D1BEX7")

它返回一个正数,除非您的输入字符串以给定的符号之一开头。这就是为什么简单的!否定就足以作为检查注意事项:此处的输入字符串不应为空。

我想这就是您想要做的:

<?php
    $arrFlags   = array('D','1','B','E','X','7');
    $needle     = substr($serial, 0,1);
    $flag       = null;
    if(in_array( $needle , $arrFlags) ){
        //DO SOMETHING WITH THE $serial VARIABLE: IT CONTAINS ANY ONE OF ['D','1','B','E','X','7']
        //PERHAPS, ASSIGN $needle TO THE VARIABLE $flag (REDUNDANT THOUGH)      
        $flag = $needle;
    }
    // IN A COMPACT WAY; YOU CAN REMOVE THE IF STATEMENT ABOVE (INCLUDING THE $flag VARIABLE) & WRITE:
    $flag = ( in_array($needle, $arrFlags) ) ? $needle : null;

希望这个片段能帮助。。。