_onichannn

【Javascript】文字列内を検索し出現位置を取得する。

指定文字列を検索し、最も初めにヒットした位置が何文字目かを取得する方法。PHPでいうとstrpos()とかstripos()みたいなことをJavascriptでやりたい場合。

indexOf()、lastIndexOf()を用いる。

■indexOf(needle, index)
文字列の先頭からneedleを検索し、一番最初にヒットした位置を返却する。
indexが指定された場合、その位置から文字列の末端に向かって検索を開始する。
ヒットしなかった場合は-1を返却する。

■lastIndexOf(needle, index)
文字列の末端から遡ってneedleを検索し、一番最初にヒットした位置を返却する。
indexが指定された場合、その位置から文字列の先頭に向かって検索を開始する。
※返却される数値は先頭から数えた位置である点に注意
ヒットしなかった場合は-1を返却する。

 

以下例。

var str = 'abcdefghijklmnopqrstuvwxyz';

var pos = str.indexOf('i'); // 8
var l_pos = str.lastIndexOf('i'); // 8
var pos_i = str.indexOf('i', 9); // -1
var l_pos_i = str.lastIndexOf('i', 9); // 8
var pos_i_2 = str.indexOf('i', 7); // 8
var l_pos_i_2 = str.lastIndexOf('i', 7); // -1

 

【Javascript】でURLエンコード、デコードする方法。

メモ。

■URLエンコード
下記何れかの関数を用いる。

・encodeURI()
・encodeURIComponent()

違いはエンコードしない文字列に差がある点。

関数名 エンコードしない文字列
encodeURI() ;/?:@&=+$-_!~*.,()a#’
encodeURIComponent() -_!~*.()a’

基本的には「encodeURIComponent()」を使ってればいいのではないかと。

■URLデコード
下記何れかの関数を用いる

・decodeURI()
・decodeURIComponent()

エンコード時に使用した関数と対応するデコード方法で復元を行うこと。またこれらの関数はUTF-8でエンコードを行うので、それ以外の文字コードを渡したい場合別のアプローチをとる必要があるので注意されたし。
※いずれの関数もデコードできない文字が含まれるときはスクリプトを終了させてしまうので、適宜try,catchなどをすること。

 

【CakePHP2.3】Configureクラス自分用まとめ。

自分用めも。

■設定値を書き込む

// 'hoge'という名前で'value'という値を書き込む
Configure::write('hoge', 'value');

■設定値を読み込む

// 'hoge'という名前の設定値を読み込む
$conf = Configure::read('hoge');

■設定値をファイルに書き出す

// 'hoge'という名前の設定値をmyConfig.phpとして書き出す
configure::dump('myConfig', 'default', array('hoge'));

※書き出されるディレクトリは「app/Config」なのでConfigフォルダに書き込み権限を与えなければならない
※第3引数を指定しなかった場合は全ての設定値が書き出される

■書き出した設定ファイルを読み込む

// 「app/Config」下の「myConfig.php」を読み込む
Configure::load('myConfig');

// ファイルの読み込みが完了したらread()メソッドで設定値を読み込む
$conf = configure::read('hoge');

 

おまけ。

■CakePHPのバージョンを取得する

$version = Configure::version();

 

【CakePHP2.3】外部クラスをオートロード対象として宣言する。

めも。

「App::uses()」を使用し利用したいクラスを宣言すると、そのクラスを呼び出した際に自動でインポートされるようになる。

■関数定義

App::uses($className, $location);

■引数詳細

引数 初期値 詳細
$className 省略不可 クラス名
$location 省略不可 クラスの所属するパッケージ名

以下例。

App::uses('myExampleClass', 'Lib');
App::uses('myCustomClass', 'Vendor');
App::uses('mySampleClass', 'Controller/Component');

appディレクトリ下のLibやVendorフォルダに外部クラスを置いてやることで、上記のようにオートロード対象として指定してやることが可能。
App::uses()はApp::build()で指定したパスリストと本メソッドで指定したクラス名を結びつけオートロードをするためのものなので、本質的なネームスペースとは異なることに注意されたし。

 

【CakePHP2.3】文字列中の特定のテキストにハイライトをかける。

「TextHelper::highlight()」メソッドを使う。

■関数定義

$this->Text->highlight($text, $phrase, $options);

■引数詳細

プロパティ 初期値 詳細
$text 省略不可 対象のテキスト
$phrase 省略不可 ハイライトしたいフレーズ
$options array() オプション(下記参照)

■$optionsに設定可能なパラメーター

キー 初期値 詳細
format ‘<span class=”highlight”>\1</span>’ ハイライト時のフォーマット
html false HTMLの混在したテキストを渡す場合はtrue、混在しない場合はfalse
regex “|%s|iu” 置換時に用いられる正規表現。%sは$phraseに置き換えられる

以下例。

コントローラー側で以下のような文字列をビューにセットしたとする。

$str = 'あいうえおかきくけこさしすせそたちつてとなにぬねの';
$this->set('str', $str);

次にビュー側で以下のように記述。

<?php echo $this->Text->highlight($str, 'くけこ'); ?>

すると以下のようなHTMLが出力される。

あいうえおかき<span class="highlight">くけこ</span>さしすせそたちつてとなにぬねの

特定のテキストの見せ方が自由自在になるので検索機能周りと連携させるとめちゃくちゃ便利。

 

【CakePHP2.3】文字列内のURLに自動でリンクを付与する。

「TextHelper::autoLinkUrls()」メソッドを使う。

■関数定義

$this->Text->autoLinkUrls($text, $options);

■引数詳細

プロパティ 初期値 詳細
$text 省略不可 URLが含まれているであろう文字列
$options array() リンクタグに不可するオプション

$optionsには「Html::link()」メソッドで与えることの出来るオプションを追加可能。

以下例。

コントローラー側からビューに文字列をセット。

$urlString = 'グーグルはhttp://google.com。ヤフーはhttp://yahoo.co.jp。';
$this->set('urlString', $urlString);

ビューファイル内で下記のようにヘルパーを呼び出す。

<?php echo $this->Text->autoLinkUrls($urlString); ?>

すると以下のようなHTMLを自動で出力してくれる。

グーグルは<a href="http://google.com">http://google.com</a>。ヤフーは<a href="http://yahoo.co.jp">http://yahoo.co.jp</a>。

ちなみに。

TextHelper::autoLinkEmails()でメールアドレスを検出、TextHelper::autoLink()でURL、メールアドレス両方を検出し自動的にリンクを付与してくれる。

 

【MySQL】JOINの際、各テーブルに対して別名をつける方法。

今更過ぎるけれどもわからなかったので調べた。

例えば以下のような感じ。
※ここではhogeテーブルとfugaテーブルがあるとする

SELECT h.id, h.name, f.email FROM hoge AS h LEFT JOIN fuga AS f ON h.fuga_id = f.id;

このようにテーブル名のあとに続けて「AS [エイリアス名]」と定義してやることで、それ以外の句ではそのエイリアス名を使用することが出来る。
SELECT句でテーブル名を一々フルで記述しなくてもよくなるので非常に便利。

 

【jQuery】セレクト要素内オプションのテキストを取得する方法。

選択されたオプションの値ではなく、表示されている文字列(テキスト)を取得する方法。

例えば以下のようなセレクト要素があると仮定する。

<select class="select">
<option value="1">hoge</option>
<option value="2">piyo</option>
<option value="3">fuga</option>
</select>

この時、「1, 2, 3」という値ではなく、「hoge, piyo, fuga」といったテキストが欲しい場合、下記のようなセレクタで取得することが出来る。

<script>
$(function(){
	// セレクトボックスの値が変更された際に実行
	$('.select').change(function(){
		var text = $(this).children('option:selected').text();
		console.log(text);
	})
})
</script>

「:selected」を指定してやるところがポイント。