strcspn

(PHP 4, PHP 5, PHP 7, PHP 8)

strcspn查找不匹配掩码的初始段的长度

描述

strcspn(
    string $string,
    string $characters,
    int $offset = 0,
    ?int $length = null
): int

返回 string 的初始段的长度,该初始段不包含 characters 中的任何字符。

如果省略 offsetlength,则将检查整个 string。如果包含它们,则效果与调用 strcspn(substr($string, $offset, $length), $characters) 相同(有关更多信息,请参见 substr)。

参数

string

要检查的字符串。

characters

包含每个不允许字符的字符串。

offset

string 中开始搜索的位置。

如果给定 offset 且为非负数,则 strcspn() 将从 string 的第 offset 个位置开始检查。例如,在字符串 'abcdef' 中,位置 0 的字符是 'a',位置 2 的字符是 'c',依此类推。

如果给定 offset 且为负数,则 strcspn() 将从 string 末尾的第 offset 个位置开始检查 string

length

要检查的 string 段的长度。

如果给定 length 且为非负数,则 string 将从起始位置检查 length 个字符。

如果给定 length 且为负数,则 string 将从起始位置检查到 string 末尾的 length 个字符。

返回值

返回 string 的初始段的长度,该初始段完全由 characters 中不包含的字符组成。

注意:

当设置 offset 参数时,返回的长度是从该位置开始计算的,而不是从 string 的开头开始计算的。

变更日志

版本 描述
8.0.0 length 现在可以为空。

示例

示例 #1 strcspn() 示例

<?php
$a
= strcspn('abcd', 'apple');
$b = strcspn('abcd', 'banana');
$c = strcspn('hello', 'l');
$d = strcspn('hello', 'world');
$e = strcspn('abcdhelloabcd', 'abcd', -9);
$f = strcspn('abcdhelloabcd', 'abcd', -9, -5);

var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
var_dump($e);
var_dump($f);
?>

上面的示例将输出

int(0)
int(0)
int(2)
int(2)
int(5)
int(4)

备注

注意: 此函数是二进制安全的。

参见

  • strspn() - 查找字符串初始段的长度,该初始段完全由给定掩码中包含的字符组成

添加说明

用户贡献说明 5 个说明

AT-HE (at_he AT hotmai1 DOT com)
18 年前
此函数可以使用类似于 strspn(),不同的是 strspn() 可以用于将字符串与允许的模式进行比较,而此函数可以用于将字符串与禁止的模式进行比较

因此,要了解任何禁止的字符是否在我们的字符串中,我们可以使用(未经反斜杠测试)...

<?php
// 大型版本
$forbidden="\"\\?*:/@|<>";
if (
strlen($filename) != strcspn($filename,$forbidden)) {
echo
"你不能用这个名字创建文件!";
}

// 短版
if (strlen($filename) - strcspn($filename,"\"\\?*:/@|<>")) {
echo
"我告诉你,你不能创建那个文件";
}
?>
maskedcoder at hotmail dot com
18 年前
用于查找包含 HTML 的变量中的引号和/或标签的开头。
$pos = strcspn($data, '<"\'');
将找到标签开头或双引号或单引号字符串的第一个出现位置。
legacyprog at routinz dot net
13 年前
当你使用第三个参数时,记住该函数将返回它跳过的字符数量,这将*不*是你的源字符串中的位置。只需将你的第三个参数值添加到函数结果中,即可获得扫描停止的第一个字符串中的位置,但我一开始没有想到。
匿名
14 年前
strcspn() 也可以被认为类似于以下正则表达式
<?php
// 其中 ... 代表字符的掩码
preg_match('/[^ ...]/', substr($subject, $start, $length) );
?>
通过这种类比,strcspn() 可以代替某些正则表达式来匹配模式,而无需正则表达式引擎的开销——例如,验证输入字符串是否代表二进制值的方法
<?php
preg_match
('/^[01]+$/i', $subject);
// 或者...
!preg_match('/[^01]/i', $subject);

// ...或使用 strcspn()
!strcspn($subject, '01');
?>
nospam at nospam dot com
7 年前
从示例中可能不清楚,

strcspn('abcdhelloabcd', 'abcd', -9, -5) == 4

因为它只评估 'hell',它不包含任何掩码,所以返回 strlen('hell')。
To Top