$str
文字列$test
が部分文字列で終わるかどうかをテストする標準のPHPの方法は次のとおりです。
$endsWith = substr( $str, -strlen( $test ) ) == $test
これは最速の方法ですか?
s($str)->endsWith($test)
たり、s($str)->endsWithIgnoreCase($test)
役立つかもしれません。
$str
文字列$test
が部分文字列で終わるかどうかをテストする標準のPHPの方法は次のとおりです。
$endsWith = substr( $str, -strlen( $test ) ) == $test
これは最速の方法ですか?
s($str)->endsWith($test)
たり、s($str)->endsWithIgnoreCase($test)
役立つかもしれません。
回答:
アサフの言ったことは正しい。PHPには、まさにそれを行うための組み込み関数があります。
substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0;
$test
が$str
PHP よりも長い場合は警告が表示されるため、最初にそれを確認する必要があります。
function endswith($string, $test) {
$strlen = strlen($string);
$testlen = strlen($test);
if ($testlen > $strlen) return false;
return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0;
}
この方法はメモリを少し消費しますが、高速です。
stripos(strrev($haystack), $reversed_needle) === 0;
これは、針が何であるかを正確に理解している場合に最適であり、逆にハードコードすることができます。プログラムで針を逆にすると、以前の方法よりも遅くなります。
stripos
場合、最悪の場合は文字列全体を反復しますが、最大でsubstr_compare
針の長さを比較します。はい、substr_compare
干し草の山(およびはるかに小さい針)の長さを計算する必要がありますが、この方法ではそれを完全にコピーし、場合によっては全体を小文字に変換して起動する必要があります。
substr_compare()
うまく機能するため、ベンチマークする価値はありません。
$endsWith = substr_compare( $str, $test, -strlen( $test ) ) === 0
負のオフセットは、「文字列の終わりからカウントを開始します」。
以下の答えが効率的で簡単であることを願っています:
$content = "The main string to search";
$search = "search";
//For compare the begining string with case insensitive.
if(stripos($content, $search) === 0) echo 'Yes';
else echo 'No';
//For compare the begining string with case sensitive.
if(strpos($content, $search) === 0) echo 'Yes';
else echo 'No';
//For compare the ending string with case insensitive.
if(stripos(strrev($content), strrev($search)) === 0) echo 'Yes';
else echo 'No';
//For compare the ending string with case sensitive.
if(strpos(strrev($content), strrev($search)) === 0) echo 'Yes';
else echo 'No';
正規表現で確認する最も簡単な方法
たとえば、与えられたメールがgmailであるかどうかを確認するには:
echo (preg_match("/@gmail\.com$/","example-email@gmail.com"))?'true':'false';