概要
stringFilter.jsについて
特徴
- 複数フィルターの順次適用
- 内蔵フィルターに無いものは適宜追加可能
- 元の文字列を変更しない
バグや改善項目がありましたら、GitHubのissueにあげてもらえると助かります。
stringFilter.jsはJavaScriptの「String.prototype」を拡張し、複数のフィルタリングをかけることの出来る関数です。
内蔵フィルターに無いものは適宜追加することができます。
<script src="js/stringFilter.js"></script>
// 追加したいフィルターオブジェクト var filter = { a: function(str){ // 引数「str」は自動で付与される変換する文字列 // ここに「str」に対するフィルタリング処理 // 「return str;」は必須 return str; }, b: function(str, c, d){ // 引数「str」は自動で付与される変換する文字列 // 引数を取りたい時は「str」以降に記述 // ここに「str」に対するフィルタリング処理 // 「return str;」は必須 return str; } }; // フィルターを追加 String.prototype._f('addFilter', filter);
フィルター名 | 引数 | 説明 |
---|---|---|
removeCtl | num |
引数:num{Number} タブをスペースに展開する際の文字数(デフォルト4)
タブ文字をnum数のスペースに変換後、改行以外の制御文字を削除 |
removeNl | なし | 改行を削除 |
trim | multipleLines, useBlankLine |
引数:multipleLines{Boolean} 複数行の際に各行でトリムするかどうか(trueの時に各行でトリム)
引数:useBlankLine{Boolean} 複数行で各行トリムの際に空白行を削除するかどうか(falseの時に空行削除) 全角スペースを含めたトリム |
rtrim | multipleLines, useBlankLine |
引数:multipleLines{Boolean} 複数行の際に各行でトリムするかどうか(trueの時に各行でトリム)
引数:useBlankLine{Boolean} 複数行で各行トリムの際に空白行を削除するかどうか(falseの時に空行削除) 全角スペースを含めた右側のみのトリム |
ltrim | multipleLines, useBlankLine |
引数:multipleLines{Boolean} 複数行の際に各行でトリムするかどうか(trueの時に各行でトリム)
引数:useBlankLine{Boolean} 複数行で各行トリムの際に空白行を削除するかどうか(falseの時に空行削除) 全角スペースを含めた左側のみのトリム |
alpha | なし | 英字のみ(全角半角変換あり) |
num | なし | 数字のみ(全角半角変換あり) |
alphaNum | なし | 英数字のみ(全角半角変換あり) |
numPyphen | なし | 数字とハイフンのみ(全角半角変換あり) |
numSlash | なし | 数字とスラッシュのみ(全角半角変換あり) |
numColon | なし | 数字とコロンのみ(全角半角変換あり) |
hiragana | なし |
ひらがなとスペース・長音符・半角ハイフン・半角数字のみ
|
katakana | なし |
カタカナとスペース・長音符・半角ハイフン・半角数字のみ
|
フィルター名 | 引数 | 説明 |
---|---|---|
nl2br | なし | 改行をBRタグに変換 |
br2nl | なし | BRタグを改行に変換(BRの大文字・小文字の区別なし) |
tab2space | num |
引数:num{Number} スペースの文字数
タブをnum文字のスペースに変換 |
snake2camel | upper |
引数:upper{Boolean} アッパーキャメルケースにするかどうか(trueの時はアッパーキャメル[パスカルケース]に変換)
スネークケースからキャメルケースに変換
|
camel2snake | separator |
引数:separator{String} 区切り文字(デフォルトはハイフン)
キャメルケースからスネークケースに変換
|
hira2kana | opt |
引数:opt{Boolean} 小文字の「ゕ」「ゖ」を変換するかどうか falseを指定した場合は変換なし
ひらがなを全角カタカナに変換
|
kana2hira | opt |
引数:opt{Boolean} 小文字の「ヵ」「ヶ」を変換するかどうか falseを指定した場合は変換なし
全角カタカナをひらがなに変換
|
hankana2zenkana | なし |
半角カタカナを全角カタカナに変換
|
zen2han | tilde, mark, hankana, space, alpha, num |
引数:tilde{Boolean} チルダ falseを指定した場合は変換なし
引数:mark{Boolean} 記号 falseを指定した場合は変換なし 引数:hankana{Boolean} 半角カナ記号 trueを指定した場合のみ変換 引数:space{Boolean} スペース falseを指定した場合は変換なし 引数:alpha{Boolean} 英字 falseを指定した場合は変換なし 引数:num{Boolean} 数字 falseを指定した場合は変換なし 全角から半角に置き換え(カタカナは含まない)
|
han2zen | tilde, mark, hankana, space, alpha, num |
引数:tilde{Boolean} チルダ falseを指定した場合は変換なし
引数:mark{Boolean} 記号 falseを指定した場合は変換なし 引数:hankana{Boolean} 半角カナ記号 falseを指定した場合は変換なし 引数:space{Boolean} スペース falseを指定した場合は変換なし 引数:alpha{Boolean} 英字 falseを指定した場合は変換なし 引数:num{Boolean} 数字 falseを指定した場合は変換なし 半角から全角に置き換え(カタカナは含まない)
|
one2multi | なし |
一文字で表記される文字を複数文字に展開する(主に会社名等で使用される文字)
|
フィルター名 | 引数 | 説明 |
---|---|---|
toInt | なし |
文字列を整数にして返す(parseInt)
|
toFloat | なし |
文字列を浮動小数点にして返す(parseFloat)
|
numString | num, format, useMinus |
引数:num{Number} 小数点以下の桁数(デフォルトは0「整数」、マイナスの指定は無視)
引数:format{Boolean} 整数部分をフォーマットするかどうか(trueの時にフォーマットを実行) 引数:useMinus{Boolean} マイナスを削除するかどうか(falseの時のみマイナスを削除) 数字(文字列)に変換して返す
|
numFormat | なし | 数字の桁区切り |
removeFigure | なし | 桁区切りの数字から区切り文字の削除(「,」の削除) |
padSlice | num, pad |
引数:num{Number} 切り出す文字数(指定なしもしくは0より小さいときは2)
引数:pad{String} 桁数に足りない場合に左側を埋める文字(デフォルトは0) 文字列を右からnum文字切り出す(num文字に足りない場合はpadで埋める) |
padFill | num, pad |
引数:num{Number} 切り出す文字数(指定なしもしくは0より小さいときは2)
引数:pad{String} 桁数に足りない場合に左側を埋める文字(デフォルトは0) 文字列の左側を桁数numになるまで埋める(numを超える場合は何もしない) |
フィルター名 | 引数 | 説明 |
---|---|---|
escapeHTML | なし | HTMLエスケープ(エンティティ文字への置換え) |
unEscapeHTML | なし | HTMLアンエスケープ(エンティティ文字からの置換え) |
escapeJs | なし | JavaScriptエスケープ |
unEscapeJs | なし | JavaScriptアンエスケープ |
escapeJsHTML | なし | JavaScriptエスケープの後、HTMLエスケープ |
noScript | なし |
外部リンク不可、括弧類のエスケープ
|
IME入力確定時・IMEがOFFの時にキー入力でイベントが発火する 「jQuery.imeEnter」と 組み合わせて使用してみます。
/** * HTML部分 */ // 小数点以下なしで桁区切りにフォーマット <label>金額入力</label> <input type="text" class="form-control price" data-filter='[["numString", 0, true]]'> // 半角・全角カタカナをひらがなに変換。ひらがなとスペース・長音符・半角ハイフン・半角数字のみを入力可 <label>ふりがな</label> <input type="text" class="form-control" data-filter='["hankana2zenkana", "kana2hira", "hiragana"]'> // 半角カタカナを全角カタカナに変換。記号は半角に(チルダは何もしない) <label>住所等</label> <input type="text" class="form-control" data-filter='["hankana2zenkana", ["zen2han", false]]'>
/** * JavaScript部分 */ // IME入力確認の初期化 $('input[data-filter]').imeEnter(); // フォーカスを受けたとき・外れたときでIME入力確認のON・OFFを行う // IME入力確定時・IMEがOFFの時にキー入力で発火するイベントの「enter.imeEnter」で入力のフィルタリングを行う $(document).on('focus blur enter.imeEnter', 'input[data-filter]', function (event) { switch (event.type) { case 'focus': // フォーカスを受けたときに入力状態の確認を有効化 $(this).imeEnter('on'); break; case 'blur': // フォーカスが外れたときに入力状態の確認を無効化 $(this).imeEnter('off'); break; case 'enter': // IME確定時・IMEがOFFの時のキー入力時にフィルタリングの実行 // キャレットの位置取得 var caret = this.selectionEnd; // フィルターの取得 var filter = $(this).data('filter'); // 現在の文字列の取得 var str = $(this).val(); // 文字列の置換え var ret = str._f(filter); if ($(this).hasClass('price')) { // 金額の入力欄の時は「円」を足す ret += '円'; } // 値のセット $(this).val(ret); // 変換後の文字列との差分からキャレット位置の変更 caret += ret.length - str.length; // 金額の入力欄の時は「円」を足しているので調整 if ($(this).hasClass('price') && caret === ret.length) { // キャレットの位置が最後尾の場合「円」の後ろにあるのでキャレット位置を変更する caret -= 1; } this.selectionStart = caret; this.selectionEnd = caret; break; } }); // 「enter」を発行してinputの中の文字列を初期化しておく $('input[data-filter]').trigger($.Event('enter'));
小数点以下なしで桁区切りにフォーマット
半角・全角カタカナをひらがなに変換。ひらがなとスペース・長音符・半角ハイフン・半角数字のみを入力可
半角カタカナを全角カタカナに変換。記号は半角に(チルダは何もしない)