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

このQ&Aのポイント
  • Javascriptのmatchでファイル名の使用可能文字のチェックを行っています。
  • 使用可能文字は漢字、全角ひらがな、カタカナ、半角英数字、ハイフン(-)、アンダーバー(_)で以下のように書いています。
  • 「0-9a-zA-Z」を半角英数字の条件から外すと、「ひらが.な-カタ_漢字1a」はNG判定になります。
回答を見る
  • ベストアンサー

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

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

.match(/[^(略)\0-9(略)] ) の0の前にあるバックスラッシュ(\)が いらないような。。 (半角数字なら 0-9 ですが、 \0-9だと記号も含んでしまうのでは?)

kinka2000
質問者

お礼

ありがとうございます。できました。 \は他の正規表現の区切りのように考えていました。

関連するQ&A

  • 正規表現

    strutsのバリデータでmaskのみで 以下の条件を正規表現を使ってあらわしたいのですが 使用可能文字  半角英数字 @ - _ . 条件  @ _ - . 同一文字の連続使用は不可。  先頭と最期は半角英数字のみ。  全部の文字数は3文字以上30文字以内。 aaa@aaa OK aaa@_-a OK aaa@@_a NG a@@@a NG @マークの連続使用不可は↓でできたのですが、 ^[a-zA-Z0-9]([a-zA-Z0-9]+@?){1,30}[a-zA-Z0-9]$ _ . - の条件を加えるとうまくいきいません。。 よい方法がございましたらご教授ください!!

  • 正規表現 英数字を1つ以上含む文字列

    ASP.NET(VB)での入力チェックのために、 半角英数字「0~9」「a~z」「A~Z」と、ハイフン「-」からなる文字列 (ただし、半角英数字「0~9」「a~z」「A~Z」はそれぞれ少なくとも1個ずつ含む) の正規表現での表し方が知りたいです。  How To: ASP.NET への入力を制約するために正規表現を使用する方法  http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000001.aspx  (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$  8から10文字で、最低1文字の数字と1文字の英字を使用し、特殊文字を使用してはいけません。 上記を参考に、 (?!^[0-9]*$)(?!^[a-z]*$)(?!^[A-Z]*$)^([a-zA-Z0-9])$ こんな感じかなぁと試してみたのですが、ダメでした。 そもそも「!」の意味が分かりません。否定でしょうか??

  • 全角英数字を半角英数字に変換したい

    全角英数字を半角英数字に変換する方法を教えて下さい。 $data =~ tr/0-9a-zA-Z/0-9a-zA-Z/; 以上のようにした場合、J-perl意外では望みどおりに変換されません。 jcode.plをつかって 全角英数字を半角英数字に変換する方法があると、 書かれていた方がいましたので、 できればjcode.plをつかった場合の 具体的なスクリプトの書き方を教えて下さい。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 英数字と記号の正規表現

    英数字と記号の文字であればtrueを返すような判定を正規表現で行いたいです。 英数字の判定([0-9a-zA-Z])、記号([\\p{Punct}]+)の判定は個別にテストして動作したのですが、二つを組み合わせて書くようにするにはどのようにすればよいのでしょうか? 当然ですが、以下のように書くと文字列の全てがそれぞれ記号なのか、英数字なのかを判定してしまうためfalseを返してしまいます。 String str = "~!@#$%^&*()_+{}|:"<>?`-=[]\;',./1234567890abcdefgxyz"; System.out.println(str.matches("[\\p{Punct}]+") || str.matches("[0-9a-zA-Z]+")); 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • Strutsで半角英数字1文字以上

    Strutsで半角英数字1文字以上 質問させてください。 Strutsを使用して、テキスト入力フォームに入力された値が半角英数字1文字以上か確認したいです。 validatorを使用して、以下のように記載したのですが、入力フォームが空欄でもOKとみなされてしまいます。(全角文字はNGになりました。) <field property="id" depends="mask"><var> <var-name>mask</var-name> <var-value>^[_a-zA-Z0-9]+</var-value> </var></field> 正規表現に問題がありますでしょうか。 お知恵をお貸しください。 以上よろしくお願いします。

    • ベストアンサー
    • Java
  • 全角英数字を半角英数字に置換する

    全角英数字を半角英数字に置換するJavaScriptを探していて、 見つけはしたのですが、HTML側の書き方が分かりません。 下記がそのソースになります。 onBlurで動くようにしたい場合、どのようにHTML側を記述してやったらよいでしょうか。 /* 全角英数字を半角英数字に置換する */ function z2h_word(src) { return src.replace(/([A-Za-z0-9_])/g, function ($0) { return String.fromCharCode($0.charCodeAt(0) - 65248); }); } 変な質問で申し訳ないですが、わかる方教えて下さい。

  • 正規表現

    質問させていただきます。 文字コード「Shift-JIS」で渡ってきた文字列を 英字とスペースはOKで、 それ以外の文字列が入力されていたら、エラーいう処理を しているのですが、うまくいきません。 ご教授よろしくお願いします。 // 半角にする $kana = mb_convert_kana($_POST['kana'], "r"); if ((ereg("^[a-zA-Z]+$", trim($kana))) == false) {   echo "エラーです"; } 全角スペースと半角スペースと英字はOKで、それ以外はNG としたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Javascriptでのドット(.)正規表現につい

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

  • 正規表現の書き方について

    $a=aaaaaaあああ1111いいい2222; 上記の$aを <br>aaaaa<br>aあああ<br>1111いいい<br>22222<br> このようにしたいのですが、 条件1:半角英数字の頭に<br> 条件2:半角英数字が5つ続いたら<br> としたいのですが、正規表現の記述方法で悩んでいます。 $b=preg_match([a-zA-Z0-9],$a)がに該当したら これで受け取ったものをpreg_replace<br>で挟む?のでしょうか。 そもそも条件は1つ以上指定できないのかもしれませんが・・・。 何かご存知の方いましたらご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 全角英数字のみ半角英数字にするには。

    VisualC++6.00 を使用しています。 ダイアログのエディットボックスで入力された文字を、 全角英数字のみ半角英数字にしたいのですが、 LCMapString だと、カタカナも半角になってしまいます。 英数字のみ半角にするには、どのようにすればいいでしょうか。 よろしくお願いします。

専門家に質問してみよう