字符串只包含下划线


does string contain only underscores

我正在寻找一个regex解决方案,该解决方案可以检查字符串是否仅由下划线___组成。

/[a-z]/不工作,[^_] 也不工作

只有下划线?试试这个:

/^_+$/

这将匹配由一个或多个下划线组成的字符串。它与空字符串不匹配。

要检查字符串是否有下划线,只需使用-_+

要检查字符串是否有字母或数字,请使用[a-zA-Z0-9]+

你已经半回答了自己的问题。顺便说一下,它很容易找到,在这里发布问题之前你应该做一些研究。

一切都是关于把字符放在regex类中,由[]定义,并给这个类"+",这意味着一个或多个。

您也可以使用或操作员,即|

/^(_+|[a-zA-Z]+|[0-9]+)$/

演示

检查字符串是否仅由下划线组成:

if (strspn($str, '_') == strlen($str)) {
    // only underscores
}

另请参阅:strspn()

从理论上讲,空字符串也只包含下划线;如果这是不希望的,您还需要检查strlen($str)是否为非零。

类似的东西可能会做到这一点。正则表达式检查您是否有任何其他字符,而trim只检查下划线

if( !preg_match("/[^0-9a-z'_]/si", $string) && trim($string,"_")!=""){
    // Code here
}

你已经更改了你的帖子。你可以做这些中的任何一个

if( trim($string,"_")=="") ){ /* _ only */ }
if( str_replace("_", "", $string)=="") ){/* _ only */}
if( !preg_match("/^_/si", $string) ){/* _ only */}