javascriptで正規表現のメタ文字をエスケープしたいけど
2007年9月6日
ユーザのタグ入力に対する補完機能を実装していたときのこと
// 候補リスト var tags = ["javascript", "php", "ruby"]; // タグ区切り文字はカンマ // 最後のカンマ以降で半角空白をトリムした文字列が補完対象の入力 var pattern = foo.value.replace(new RegExp('^.*,[ ]*', ""), ""); for (var i = 0; i < tags.length; i++) { if (tags[i].match(pattern) !== null) { // 入力フォームの下に補完候補リストを表示する処理 }; };
これで完璧じゃないかと思ってたら、ユーザの入力(foo.value)の中に正規表現のメタ文字が入る場合に、それをそのままメタ文字として解釈してしまうのでよろしくない。
んー、メタ文字をエスケープする便利関数は、ネイティブだと無くて、ネットでググっても見つからない。
仕方ないので、String.match の替わりに String.indexOf を使うことで逃げました。
仕方ないので、String.match の替わりに String.indexOf を使うことで逃げました。
どっかに、メタ文字を全部エスケープしてくれる関数は無いっすかねー。