11

我需要检查一个字符串以确定它是否包含除 之外的任何字符|,以便分配那些除了|NULL 值之外什么都没有的变量(理论上可以有任意数量的|字符,但可能不会超过 5-6 )。像||||

我可以看到循环遍历字符串的每个字符或类似的东西,但我觉得必须有一种更简单的方法。

4

4 回答 4

17
if (preg_match('/[^|]/', $string)) {
    // string contains characters other than |
}

或者:

if (strlen(str_replace('|', '', $string)) > 0) {
    // string contains characters other than |
}
于 2012-04-20T14:26:05.283 回答
3

是的,您可以使用正则表达式:

if(! preg_match('/[^\|]/', $string)) {
  $string = NULL;
}
于 2012-04-20T14:27:11.823 回答
2

我想检查一个字符串是否只包含某些字符。为了防止双重否定(因为我发现它们更难阅读)我决定使用以下正则表达式:

preg_match('/^[|]+$/', $string)

这会从头到尾检查一个字符串是否只包含|字符(至少一个)。

于 2016-08-29T10:02:53.117 回答
0

最快和最简单的方法可能是 stripos 函数。它返回一个字符串在另一个字符串中的位置,如果找不到,则返回 false:

if (false === stripos($string, '|')) {
    $string = null;
}

是严格类型比较所false ===需要的,因为 stripos 可以返回一个零,表明 | 在第一个字符上。

您可以使用更复杂的验证引擎,使阅读更容易。我推荐Respect\Validation。使用示例:

if (v::not(v::contains('|'))->validate($string)) {
    $string = null;
}
于 2012-04-20T14:40:08.973 回答