みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Javascriptでのドット(.)正規表現につい

Javascriptで入力したファイル名に禁止文字がないかmatchを使って確認しようと
しています。
ファイル名にドット(.)があったらエラーにしたいのですが、ファイル名末尾に
ドット(.)があった場合はちゃんとチェックしてくれますが、ファイル名の真ん中に
ドット(.)があった場合はチェックされません「\\.」としてますがなにがいけない
のでしょうか。
また、漢字、全角ひらがな、カタカナ、半角英数字、ハイフン(-)、アンダーバー(_)
のチェックもしたいのですが条件が多くて複雑化して見栄えが悪いです。
上手くすっきり書く方法はないのでしょうか。
よろしくお願いします。

投稿日時 - 2019-02-21 07:16:51

QNo.9590006

すぐに回答ほしいです

質問者が選んだベストアンサー

単純に何かの文字を排除したい場合は正規表現よりも indexOf() を使った方が処理も高速で簡単です。例えば以下の記述例の場合…

var my_str = 'example-01.jpg',
my_exp = '.',
re = my_str.indexOf(my_exp);

if ( -1 == re ) {
alert('OK.');
}
else {
alert('NG.');
}

~上記の記述例で "." が文字列内に含まれるかどうか判定可能です。

正規表現は通常、指定した条件に合致するか否かでしか判定出来ません。ですのでこういう場合に良く考えがちな「NGワードが有った場合」ではマッチさせられません。この場合、逆に「OKワード以外は全てダメ」という風にコードを書かないと正規表現は使う事が出来ません。

一応、正規表現にも「否定先読み」などと呼ばれるNGワードでマッチさせる手法も有るには有りますが…条件の指定方法が複雑で処理にも膨大なメモリを食い潰すため、通常は使いません。また現在のJavascriptの仕様だと「否定先読み」はエラーが出ないだけで正常に機能してなかったと思います。Javascriptの正規表現は現時点ではかなり不完全でバグや穴が多いです。

ですのでまず最初に「OKとなる条件」を綿密に考えて条件を絞り込み、それにマッチする正規表現を考えて真贋判定などを行って処理を振り分ける様にコードを考えてみてください。

P.S.
いわゆるエスケープ処理(¥)が上手く機能しない、或いは条件によって変になるのはJavascriptの仕様というか、正規表現処理を行うタイミングや繰り返し回数によって、文字列に付与したエスケープ文字(¥)がプログラム内部で消費されて1個ずつ消えて行くので、それで処理がおかしくなる事が多々あります。

これを防ぐために消費される分を余分に予め付け足して置く必要があり、例えば「¥¥.」とか「¥¥¥.」みたいに記述して置く必要があります。

ただしこれは消費されなかった場合は逆にバグの原因になるので、無闇矢鱈にエスケープ文字を増やせば良いという訳ではありません。こればっかりは実際のコードを見てみないと何とも言えないので…

投稿日時 - 2019-02-21 08:54:40

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問