現在の位置: ホーム> 最新記事一覧> [strncmp関数ケースは敏感ですか? PHPのSTRNCMPケースの感度の問題と解決策]

[strncmp関数ケースは敏感ですか? PHPのSTRNCMPケースの感度の問題と解決策]

gitbox 2025-08-22

1。strncmp関数の基本的な使用

strncmp関数の基本的な構文は次のとおりです。

 <span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
  • $ str1 :最初の文字列。

  • $ str2 :2番目の文字列。

  • $の長さ:比較する文字の数。

strncmp関数は2つの文字列の先頭から始まり、ほとんどの長さの文字が比較されます。次の可能な値を返します。

  • 0 :最初の長さの文字が等しいことを意味します。

  • 0を超える$ str1の最初の長さの文字が$ str2の最初の長さの文字よりも大きいことを意味します。

  • 0未満$ STR1の最初の長さの文字は、$ STR2の最初の長さの文字よりも少ないことを意味します。

2。strncmpケースは敏感ですか?

strncmp関数は症例に敏感です。つまり、 「Hello」「Hello」Strncmpと比較すると、2つの文字列がイニシャルを除いてまったく同じであっても、機能は等しくないと考えられます。次の例を参照してください。

 <span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"2つの文字列は同じです"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"2つの文字列は異なります"</span></span><span>;
}
</span></span>

出力は次のとおりです。

 <span><span>2つの文字列は異なります
</span></span>

「Hello」「Hello」にはコンテンツの違いのみがありますが、 STRNCMPはデフォルトではケースに敏感であるため、それらを不平等と見なします。

3.症例感受性の問題を解決する方法は?

STRNCMPを比較時に症例感受性にしたい場合は、 STRNCASECMP関数を使用できます。 strncasecmpはケースに依存しないバージョンであり、その使用はstrncmpに似ています。

 <span><span><span class="hljs-title function_ invoke__">strncasecmp</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>

STRNCASECMP関数は、2つの文字列の最初の長さの文字を比較すると、ケースの違いを無視します。例は次のとおりです。

 <span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strncasecmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"2つの文字列は同じです"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"2つの文字列は異なります"</span></span><span>;
}
</span></span>

出力は次のとおりです。

 <span><span>2つの文字列は同じです
</span></span>

上記のように、 Strncasecmp関数は「Hello」「Hello」のケースの違いを無視し、それらを同じと見なします。

4。概要

  1. strncmp関数は、文字列を比較する場合、症例に敏感です。

  2. ケース非感受性比較を行う必要がある場合は、 STRNCASECMP関数を使用できます。

実際の開発では、文字列の比較の結果が期待に沿っていることを確認するために、特定のニーズに応じてSTRNCMPまたはSTRNCASECMPを使用することを選択する必要があります。ユーザー入力、フォームデータ、またはデータベースクエリの結果を処理する際に、これらの機能の違いを理解することが特に重要です。