Sabel_Util_Stringクラスを使用すると、文字列をオブジェクトとして扱うことができます。length(), isEmpty()メソッドなどを除いて全て
Sabel_Util_Stringオブジェクトで返されるため、メソッドチェーンを使用することが可能です。また、__toString()を実装しているため、
echoによる出力・文字列と連結・phpの文字列関数の引数に渡すことなどができます。
また、mbstring拡張がロードされていれば、全てのメソッドでマルチバイトを考慮した処理が行われます。
PHPの文字列関数とStringクラスのメソッドの対応、及びその使用方法を説明します。
strpos => indexOf
指定した文字のポジションを得ることができます。インデックスは0から始まります。
$string = new Sabel_Util_String("test");
echo $string->indexOf("e"); // 1
$string = new Sabel_Util_String("あいうえお");
echo $string->indexOf("え"); // 3
trim => trim, ltrim => ltrim, rtrim => rtrim
引数charlistを指定しなければ、文字列前後の半角スペース・全角スペース・改行を取り除くことができます。
// trim
$str = new Sabel_Util_String(" abcde ");
echo $str->trim(); // "abcde"
// ltrim
$str = new Sabel_Util_String(" abcde ");
echo $str->ltrim(); // "abcde "
// rtrim
$str = new Sabel_Util_String(" abcde ");
echo $str->rtrim(); // " abcde"
// set charlist
$str = new Sabel_Util_String("@_-abcde-_@");
echo $str->trim("@_-"); // "abcde"
// trim
$str = new Sabel_Util_String(" あいうえお ");
echo $str->trim(); // "あいうえお"
// ltrim
$str = new Sabel_Util_String(" あいうえお ");
echo $str->ltrim(); // "あいうえお "
// rtrim
$str = new Sabel_Util_String(" あいうえお ");
echo $str->rtrim(); // " あいうえお"
// set charlist
$str = new Sabel_Util_String("んをわあいうえおわをん");
echo $str->trim("わをん"); // "あいうえお"
str_pad => pad
指定した文字列で文字列を埋めることができます。第2引数には埋めた後の文字列の長さを、第3引数では左右もしくは両方に埋めるかの定数を指定します。
$str = new Sabel_Util_String("a");
echo $str->pad("z", 5); // "zzzza"
$str = new Sabel_Util_String("a");
echo $str->pad("z", 5, STR_PAD_RIGHT); // "azzzz"
$str = new Sabel_Util_String("a");
echo $str->pad("z", 5, STR_PAD_BOTH); // "zzazz"
$str = new Sabel_Util_String("a");
echo $str->pad("xyz", 10, STR_PAD_BOTH); // "xyzxaxyzxy"
$str = new Sabel_Util_String("あ");
echo $str->pad("い", 5); // "いいいいあ"
$str = new Sabel_Util_String("あ");
echo $str->pad("い", 5, STR_PAD_RIGHT); // "あいいいい"
$str = new Sabel_Util_String("あ");
echo $str->pad("い", 5, STR_PAD_BOTH); // "いいあいい"
$str = new Sabel_Util_String("あ");
echo $str->pad("いうえおか", 10, STR_PAD_BOTH); // "いうえおあいうえおか"
str_repeat => repeat
文字列をx回繰り返します。
$str = new Sabel_Util_String("abc");
echo $str->repeat(3); // "abcabcabc"
$str = new Sabel_Util_String("あいうえお");
echo $str->repeat(2); // "あいうえおあいうえお"
strtoupper => toUpperCase, strtolower => toLowerCase
全て大文字、または全て小文字に変換します。
※マルチバイト文字には対応していません。
// strtoupper
$str = new Sabel_Util_String("abc");
echo $str->toUpperCase(); // "ABC"
// strtolower
$str = new Sabel_Util_String("ABC");
echo $str->toLowerCase(); // "abc"
ucfirst => ucfirst, lcfirst => lcfirst
先頭文字を大文字に、または小文字に変換します。
※マルチバイト文字には対応していません。
// ucfirst
$str = new Sabel_Util_String("abc");
echo $str->ucfirst(); // "Abc"
// lcfirst
$str = new Sabel_Util_String("ABC");
echo $str->lcfirst(); // "aBC"
str_replace => replace
第1引数で指定した文字列を、第2引数で指定した文字列へ置き換えます。引数は str_replace関数 と同じです。
$str = new Sabel_Util_String("a_b_c");
echo $str->replace("_", " "); // "a b c"
$str = new Sabel_Util_String("a_b_c.d.e");
echo $str->replace(array("_", "."), " "); // "a b c d e"
$str = new Sabel_Util_String("あいあいあ");
echo $str->replace("い", " "); // "あ あ あ"
$str = new Sabel_Util_String("あいあいあ");
echo $str->replace(array("あ", "い"), array("a", "b")); // "ababa"
substr => substring or substr
第1引数で指定したポジションから、第2引数で指定した長さの文字列を抜き出します。引数は substr関数 の第2、第3引数と同じです。
$str = new Sabel_Util_String("abcde");
echo $str->substring(2); // "cde"
$str = new Sabel_Util_String("abcde");
echo $str->substring(2, 2); // "cd"
$str = new Sabel_Util_String("あいうえお");
echo $str->substring(2); // "うえお"
$str = new Sabel_Util_String("あいうえお");
echo $str->substring(2, 2); // "うえ"
explode => explode
第1引数で指定した文字で、最大第2引数で指定した数に文字列を分割します。。引数は explode関数 の第1、第3引数と同じです。
$str = new Sabel_Util_String("abc:def:ghi:jkl");
var_dump($str->explode(":"));
// array(4) {
// [0]=>
// string(3) "abc"
// [1]=>
// string(3) "def"
// [2]=>
// string(3) "ghi"
// [3]=>
// string(3) "jkl"
// }
$str = new Sabel_Util_String("abc:def:ghi:jkl");
var_dump($str->explode(":", 3));
// array(3) {
// [0]=>
// string(3) "abc"
// [1]=>
// string(3) "def"
// [2]=>
// string(3) "ghi:jkl"
// }
split => split
引数で指定した文字数ごとに文字列を分割します。
$str = new Sabel_Util_String("abcdefg");
var_dump($str->split(3));
//array(3) {
// [0]=>
// string(3) "abc"
// [1]=>
// string(3) "def"
// [2]=>
// string(1) "g"
//}
$str = new Sabel_Util_String("あいうえおかきくけこ");
var_dump($str->split(3));
//array(4) {
// [0]=>
// string(9) "あいう"
// [1]=>
// string(9) "えおか"
// [2]=>
// string(9) "きくけ"
// [3]=>
// string(3) "こ"
//}
md5 => md5, sha1 => sha1
現在の文字列からハッシュ文字列を生成します。
$str = new Sabel_Util_String("foo");
echo $str->md5(); // "acbd18db4cc2f85cedef654fccc4a4d8"
$str = new Sabel_Util_String("foo");
echo $str->sha1(); // "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
文字列の比較を行うには、equals()メソッドを使用します。equals()メソッドには複数の値を渡すことができ、その場合はどれか一つでも一致した場合に
trueを返します。文字列の他に、Sabel_Util_Stringのインスタンスを渡すことも可能です。
$str = new Sabel_Util_String("abc");
var_dump($str->equals("aaa")); // false
var_dump($str->equals("abc")); // true
$str2 = new Sabel_Util_String("bca");
var_dump($str->equals($str2)); // false
$str3 = new Sabel_Util_String("abc");
var_dump($str->equals($str3)); // true
var_dump($str->equals("aaa", "bbb", $str2, "ccc")); // false
var_dump($str->equals("aaa", "bbb", $str2, "ccc", $str3)); // true
append()メソッドを使用することで、文字列を追加することができます。
$str = new Sabel_Util_String("abc");
$str->append("def");
echo $str; // abcdef
$str2 = new Sabel_Util_String("ghi");
$str->append($str2);
echo $str; // abcdefghi
指定した位置の文字を取得するには、charAt()を使用します。文字のインデックスは0から始まります。
$str = new Sabel_Util_String("abcdefg");
echo $str->charAt(0); // "a"
echo $str->charAt(3); // "d"
$str = new Sabel_Util_String("あいうえお");
echo $str->charAt(0); // "あ"
echo $str->charAt(3); // "え"
insert()メソッドを使用すると指定した位置(第1引数)に文字列(第2引数)を挿入することができます。
$str = new Sabel_Util_String("abcdefg");
$str->insert(3, "xyz");
echo $str; // "abcxyzdefg"
$str = new Sabel_Util_String("あいうえお");
$str->insert(3, "わをん");
echo $str; // "あいうわをんえお"
textlink()メソッドを使用すると、文字列内のURLをリンクにすることができます。
$text = <<<BODY <a class="foo" href="http://www.example.com/">ホームページ</a> <a id="foo" class="bar" href="http://www.example.com/?a=10&b=20">ホームページ2</a> http://www.example.com/?a=10&b=20 を見てください。 BODY; $str = new Sabel_Util_String($text); echo $str->textlink(false); -------------------------------------------------------------- <a href="http://www.example.com/">ホームページ</a> <a href="http://www.example.com/?a=10&b=20">ホームページ2</a> <a href="http://www.example.com/?a=10&b=20">http://www.example.com/?a=10&b=20</a> を見てください。
上記を見てわかるように、既にaタグで囲まれているもの(リンク)はそのままリンクとして残ります。その時、href以外の属性は削除されます。
多くの場合、この処理を行うのは表示時だと思います。HTMLエスケープした文字列をこのメソッドに渡し、結果を表示してください。
そうしないとリンク処理された後の文字列をHTMLエスケープすることになり、結局リンクにならないためです。
また、その場合は引数に false を渡す必要はありません。
$str = new Sabel_Util_String(h($text)); echo $str->textlink();
succ()メソッドを使用すると文字列をインクリメントすることができます。
$str = new Sabel_Util_String("a");
echo $str->succ(); // "b"
echo $str->succ(); // "c"
-----------------------------------------------
$str = new Sabel_Util_String("y");
echo $str->succ(); // "z"
echo $str->succ(); // "aa"
echo $str->succ(); // "ab"
-----------------------------------------------
$str = new Sabel_Util_String("9");
echo $str->succ(); // "10"
echo $str->succ(); // "11"
-----------------------------------------------
$str = new Sabel_Util_String("A998");
echo $str->succ(); // "A999"
echo $str->succ(); // "B000"
echo $str->succ(); // "B001"
...
echo $str->succ(); // "Z999"
echo $str->succ(); // "AA000"