7

今日の職場では、 strspnを使用する理由を見つけようとしていました。

Googleコードを検索して、それが有用な方法で実装されたことがあるかどうかを確認し、空白になりました. 別の文字列の文字のみを含む文字列の最初のセグメントの長さを本当に知る必要がある状況を想像することはできません。何か案は?

4

5 に答える 5

4

PHPマニュアルにリンクしていますが、関数は、、、strspn()などとともにCライブラリから来ています。strlen()strcpy()strcmp()

strspn()は、文字列を文字ごとに選択して、文字が一連の値のいずれかに一致するかどうかをテストするための便利な代替手段です。トークナイザーを書くときに便利です。に代わるものstrspn()は、次のような多くの反復的でエラーが発生しやすいコードです。

for (p = stringbuf; *p; p++) {
  if (*p == 'a' || *p == 'b' || *p = 'c' ... || *p == 'z') {
    /* still parsing current token */
  }
}

エラーを見つけることができますか?:-)

もちろん、正規表現マッチングのサポートが組み込まれている言語では、strspn()ほとんど意味がありません。しかし、C で DSL の初歩的なパーサーを作成すると、かなり気の利いたものになります。

于 2008-12-16T18:08:04.530 に答える
1

これは、ANSI C 関数に基づいていますstrspn()。これは、高レベルの文字列クラスがない低レベルの C 解析コードで役立ちます。便利な文字列解析関数がたくさんある PHP ではあまり役に立ちません。

于 2008-12-16T18:02:00.003 に答える
1

まあ、私の理解では、この正規表現と同じものです:

^[set]*

set は、検索する文字を含む文字列です。

これを使用して、文字列と分割の先頭にある任意の数字またはテキストを検索できます。

コードをphpに移植する際に重宝しそうです。

于 2008-12-16T18:04:47.110 に答える
1

ブラックリストに登録して、エラーがどこから始まったかをユーザーに知らせるのに最適だと思います。同様に、MySQL はエラーが発生した場所からクエリの一部を返します。

コメントのどの部分が有効でないかをユーザーに知らせる次の関数を参照してください。

function blacklistChars($yourComment){

$blacklistedChars = "!@#$%^&*()";
$validLength = strcspn($yourComment, $blacklistedChars);
if ($validLength !== strlen($yourComment))
{

    $error = "Your comment contains invalid chars starting from here: `" . 
        substr($yourComment, (int) '-' . $validLength) . "`";

    return $error;
}

return false;
}

$yourComment = "Hello, why can you not type and $ dollar sign in the text?"; 
$yourCommentError = blacklistChars($yourComment);

if ($yourCommentError <> false)
echo $yourCommentError;
于 2012-01-14T11:00:27.443 に答える
0

これは、atoiのような関数で特に役立ちます。数値に変換する文字列があり、セット「-.0123456789」に含まれていないものは処理したくない場合です。

しかし、はい、それは限られた使用しかありません。

-アダム

于 2008-12-16T18:22:13.440 に答える