[PHP] startsWith, endsWith を実装する
4 min read
Java で何の気なしに使っていた startsWith
, endsWith
。
PHP で同様のことをしようと思ったのですが、これに相当するメソッドはないんですね。
そういえばpreg_match
とかでチェックしていたような覚えがあります。
そもそもstartsWith, endsWith とは
指定の文字列で始まる/終わるかを判定するメソッドです。
startsWith
public boolean **startsWith**(String prefix)
- この文字列が、指定された接頭辞で始まるかどうかを判定します。
- パラメータ:
- `prefix` - 接頭辞
- 戻り値:
- 引数によって表される文字シーケンス、この文字列によって表される文字シーケンスの接頭辞である場合は `true`、そうでない場合は `false`。引数が空の文字列の場合や、`equals(Object)メソッドによる判定においてこの `String` オブジェクトに等しい場合にも `true` が返される
- 導入されたバージョン:
- 1. 0
endsWith
public boolean **endsWith**(String suffix)
- この文字列が、指定された接尾辞で終るかどうかを判定します。
- パラメータ:
- `suffix` - 接尾辞
- 戻り値:
- 引数によって表される文字シーケンスが、このオブジェクトによって表される文字シーケンスの接尾辞である場合は `true`、そうでない場合は `false`。引数が空の文字列の場合や、`equals(Object)`メソッドによる判定においてこの `String` オブジェクトに等しい場合にも、結果は `true` になる
引用: String (Java Platform SE 6)
使い方
boolean result = str.startsWith("abc");
boolean result = str.endsWith("efg");
実装する
いろいろと試してみましたが以下の方法がシンプルな気がします。
function startsWith($haystack, $needle)
{
return $needle === "" || strpos($haystack, $needle) === 0;
}
function endsWith($haystack, $needle)
{
return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}
var_dump(startsWith("hello world", "hello")); // true
var_dump(endsWith("hello world", "world")); // true
引用: string - startsWith() and endsWith() functions in PHP - Stack Overflow
同ページ内で一番評価の高い方法は以下です。
やっていることはほぼほぼ同じようですね。こちらの方が何をやってるか分かりやすいかも。
function startsWith($haystack, $needle)
{
$length = strlen($needle);
return (substr($haystack, 0, $length) === $needle);
}
function endsWith($haystack, $needle)
{
$length = strlen($needle);
if ($length == 0) {
return true;
}
return (substr($haystack, -$length) === $needle);
}