使用Preg Match检查字符串是否包含下划线

Zab*_*abs 1 php regex preg-match

我试图检查字符串是否包含下划线 - 任何人都可以解释下面的代码有什么问题

    $str = '12_322';
    if (preg_match('/^[1-9]+[_]$/', $str)) {
       echo 'contains number underscore';
    }
Run Code Online (Sandbox Code Playgroud)

Sab*_*san 8

在你的正则表达式中[_]$,下划线位于字符串的末尾.这就是为什么它与你的不匹配.

如果您只想检查字符串中任何位置的下划线检查,那么:

if (preg_match('/_/', $str)) {
Run Code Online (Sandbox Code Playgroud)

如果要检查字符串必须包含数字和下划线,那么

if (preg_match('/^[1-9_]+$/', $str)) {  // its 1-9 you mentioned
Run Code Online (Sandbox Code Playgroud)

但是对于您的样本输入12_322,这个也可以很方便:

if (preg_match('/^[1-9]+_[1-9]+$/', $str)) {
Run Code Online (Sandbox Code Playgroud)

  • 正如案例1的补充(仅检查'_'是否在字符串中) - `strpos`将比正则表达式更快. (2认同)