• ベストアンサー

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

4017Bの回答

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1303/1774)
回答No.1

単純に何かの文字を排除したい場合は正規表現よりも 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個ずつ消えて行くので、それで処理がおかしくなる事が多々あります。 これを防ぐために消費される分を余分に予め付け足して置く必要があり、例えば「¥¥.」とか「¥¥¥.」みたいに記述して置く必要があります。 ただしこれは消費されなかった場合は逆にバグの原因になるので、無闇矢鱈にエスケープ文字を増やせば良いという訳ではありません。こればっかりは実際のコードを見てみないと何とも言えないので…

関連するQ&A

  • 半角英数字の正規表現でドット(.)がはじかれない

    Javascriptのmatchでファイル名の使用可能文字のチェックを行っています。 使用可能文字は漢字、全角ひらがな、カタカナ、半角英数字、ハイフン(-)、 アンダーバー(_)で以下のように書いています。 if ( filename.match(/[^\u30a0-\u30ff\u3040-\u309f\u30e0-\u9fcf\0-9a-zA-Z\-\_]/) ){ alart(NG) // 使用可能文字以外が含まれている } else{ alart(OK) // 使用可能文字だけ } ファイル名が「ひらがな-カタ_漢字1a」はOK、「ひらが.な-カタ_漢字1a」はNG としたいのですが両方OKになってしまいます。 どうやら半角英数字の「0-9a-zA-Z」を条件に入れることでドット(.)も使用可能文字 とされてしまうみたいです。 「0-9a-zA-Z」を外すと「ひらが.な-カタ_漢字1a」はNG判定になります。 なぜこのようになるのか教えて下さい。

    • ベストアンサー
    • Java
  • 正規表現による文字列のチェックについて

    文字列の入力チェックで困っています。 入力された文字列が以下の文字のみで構成されているか、正規表現でチェックするにはどうすれば良いか教えてください。 できれば一発でチェックしたいです。 ・全角(漢字、ひらがな、かたかな)※英数字を含め、左記以外の全角は使用禁止 ・半角英数字 ・半角記号(「-」「.」「:」「*」「&」)※後から追加変更される可能性がある Java(UTF-8)とJavaScript(Shift-JIS)それぞれで対応できる方法をお願いいたします。

  • 正規表現について

    お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。

    • ベストアンサー
    • PHP
  • エクセルでひらがな・漢字はそのままでカタカナを全角・英数字を半角にする方法

    エクセル2000を使っています。 会社で住所録作成を引き継ぎましたが、 一つのセルにひらがな、漢字、カタカナ、英数字 が半角・全角ごちゃ混ぜで入っているので 管理がしづらくて困っています。 例えば、 あいうアジアNET株式会社 株式会社ABC123 などなど・・・・ ひらがな・漢字はそのままで、 カタカナを全角、英数字を半角にする方法は ありませんか? 最初にASC関数を使ってみたらカタカナも半角になり、 Phonetic関数を使うと、 カタカナだけ全角になりましたが、 ひらがなまでカタカナになり・・・ JIS関数も試しましたが今度は英数字まで全角になり、 どうしたものかと困っております。 よろしくお願いします。

  • EXCEL 「ASC」関数  英数字の全角を半角に変換するよい方法があれば教えてください

    EXCELで入力しているデータをフィルターを使用して検索できる データベースにしたいのですが、以前からの入力しているデータの英数字が全角、半角が混在していてます。 フィルター検索の際に全角で入力すると半角入力のものがヒットしないので不便で、英数字の半角統一にしたいと考えています。 ASC関数を使用して英数字の全角→半角を行なうこと考えたのですが ASC関数ですとカタカタも半角カタカナに変換されるので 英数字だけを全角→半角にする関数や方法などあれば教えてください。 入力データは 漢字、ひらがな、カタカナ、英数字が混在しています。 希望 全角→漢字、ひらがな、カタカナ 半角→英数字 宜しくお願い致します。

  • 正規表現[a-z0-9\-\.]* の意味を教えて

    [a-z0-9\-\.]* の意味を教えてください。 preg_matchで確かめてみようと思ったのですが、 よく分かりませんでした。 「半角英小文字」か「数字」か「ハイフン」か「ドット」だと思ったのですが、 「半角英大文字」でも、「""」でも「空白」でも「日本語」でも、1が返ってきました。 「*」を調べたら、「直前の表現の0回以上の繰り返しにマッチ」て書いてあったのですが、 「0回以上」の意味が分かりません。 「すべてに当てはまる」ということなのでしょうか?

    • ベストアンサー
    • PHP
  • 全角カタカナの正規表現

    if (preg_match('/[ァ-ヶー]+/', $value, $match )) { print ("$value"."はカタカナです。"."($match[0])"."<br />") } else { print ("$value"."はカタカナではない。<br />"); } という感じで全角カタカナにマッチさせる正規表現を使いたいのですが、このやり方だと「全角カタカナを含んでいる…」という表現になってしまいます。ある文字列が「すべて全角カタカナである」という正規表現を考えているのですが、なかなかうまくいきません。逆引きのサンプルなんかでもなかなか見つからなくて困っています。  同様に「すべて平仮名にマッチ!」というのにも応用できると思うのですが、なかなかうまく行きません。  是非、そのやり方やヒントをおしえてください。  マルチバイト対応なので[ぁ-ん]のような形で表記できます。またPerl互換(preg_match)で作っているので、Perlに詳しい方も是非是非おしえてください。

    • ベストアンサー
    • PHP
  • 半角カタカナになってしまう!

    ローマ字でかなを打つときは、今しているようにひらがなが打てます(全角)。これを半角にすると今までは半角英数字が打てていたんですが、どっかをいじったのか、半角カタカナを表示してしまうのです。 どうすれば、半角英数字を打てるようにできるのでしょうか?

  • 漢字などを正規表現でパターンマッチさせる方法?

    こんにちは,よろしくお願いします。 名前(姓と名に分けて)を入力してもらうフォームを作っています。 姓名を日本語,つまり,漢字,ひらがな,カタカナを全角(2バイト文字?)で入力してもらいたいと考えています。 ぜんぜんわからないのですが,パターンを次のように考えて, var pattern = "[亜-熙ぁ-んァ-ヶ]+"; if(seimei.match(pattern)){ 上記のようにやってみたらうまくいったように思えましたが,「蓬莱」や「紀香」などの漢字を入力するとマッチしません。 文字セットは”UTF-8”を使っています。 すべての漢字,ひらがな,カタカナをマッチさせるようにするにはどのようなパターンで行えばいいのでしょうか?教えてください。 よろしくお願いします。

  • 正規表現に関して

    初歩的な質問で済みません。。 今、入力内容が人名で有るのかを調べる関数を作ろうとしています。 具体的には、 1、漢字、ひらがな、全角カタカナでの入力であるか。 2、性名の間に全角スペースが入っているか。(出来れば、外国名の場合はミドルネームの前後にスペース) を判別したいのです。 正規表現を使えば良いと思うのですが、webを調べましたが具体的な記事が見つかりませんでした。 どうやら自分には正規表現が理解しがたいようです。。 詳しい方、解りやすく教えて下さい!

    • ベストアンサー
    • PHP