• ベストアンサー

java での全角数値を指定する正規表現について

はじめまして。 javaでの正規表現についての質問です。 現在私は String line = reader.readLine(); if ( line.matches("^[-]?[0-9]*[.]?[0-9]*") ) 上記のような半角の整数、浮動小数点数、マイナスの入力時にTrueとなり、それ以外はFalseとなるようにしています。 ここに「全角の整数、浮動小数点数、マイナス」もTrueとなるように記述したいのですがうまくいきません。 or 条件にて || line.matches("^[-]?[0-9]*[.]?[0-9]*") と、ただ半角の部分を全角に置き換えたところで改善するものではありませんでした。 どなたか良い改善策教えていただけましたら幸いです。

  • Java
  • 回答数2
  • ありがとう数1

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

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

正規表現はあまり使ったことがないのではずしているかもしれませんが,Stringインスタンスに保持する文字列データはUnicodeで保持されているというようなことをどこかで読んだような気がするので,次のようにUnicodeの文字コードを16進表記で指定してみたらどうでしょうか。 line.matches("^[\u2212]?[\uFF10-\uFF19]*[\uFF0E]?[\uFF10-\uFF19]*") ちなみに全角文字をソースコードに埋め込む場合は,Javaコンパイラにソースファイルの文字コード変換が必要であることを知らせる必要があると思います。

参考URL:
http://ash.jp/code/unitbl21.htm
Yakkun14
質問者

お礼

ご回答ありがとう御座います。 なるほど、この表記方法は思いつきませんでした。 上記記述方法でコンパイルは通ったのですが残念ながら私が思った通りの動きはしませんでしたが勉強になりました。 oscalymnk様のご回答を参考に色々といじってみたいと思います。 今のところ正規表現の前にchar型を使用し、大文字だった文字列を小文字に変換してから正規表現へ進むようにしております。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

正規表現そのものは間違っていないと思います。 import java.lang.*; public class mmm { public static void main(String[] args) { String lines[] = {"12,34", "12.34", "XXXXX" }; int max = lines.length; for (int i=0; i < max; i++) { System.out.println(lines[i] + "を試します"); if (lines[i].matches("^[-]?[0-9]*[.]?[0-9]*")) { System.out.println("マッチしました。"); } else { System.out.println("マッチしませんでした。"); } } } } 12,34を試します マッチしませんでした。 12.34を試します マッチしました。 XXXXを試します マッチしませんでした。 入力の処理の仕方に問題があるのではないでしょうか?

関連するQ&A

  • 半角記号、全角記号を含む正規表現を作れなくて困っています。

    システムの入力チェックのために !"#$%&'()=~|`{+*}<>?_-^\@[;:],./ !”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・ などの半角記号、全角記号を1個以上含むとtrueを返す 正規表現を作りたいのですが、うまくできなくて困っています。 以下の[ ]に入れる値で、何か良いものはありませんか? Boolean b = Pattern.compile("[ ]+").matcher(input).matches();

    • ベストアンサー
    • Java
  • javascriptでの正規表現について

    javascript正規表現にて正の整数および小数(半角のみ) を判別したいのですがうまくいきません。どうすればいいのでしょうか。<script language=javascript> function StrCheck(strSrc){ var value = strSrc.value; if (value.match(/[0-999]+¥.[0-99]/)==true){ alert("半角数字のみで入力して下さい"); } </script> ); 以上のようにつくってみましたが、半角でも全角でも「半角を入力してください」というメッセージがでてしまいます。これを全角のみでエラー表示がでるようにしたいのですがどうしたらよいのでしょうか。参考になるWEBページでもあれば教えてください。ご教授の程よろしくお願い申し上げます。

  • javaの正規表現について質問です。

    javaの正規表現matchesに関して質問です。 正規表現を用いて文字列が半角数字のみで出来ているかどうかを判定したいと思っています。 調べたとろこ下記の正規表現で判定できそうなのですが、 正規表現のルールが理解できず困っています。 ------------------------------------------- String aaa = "0123456789"; //パターン1 aaa.matches("^[0-9]{10,11}$"); //パターン2 aaa.matches("^[0-9]+$") ------------------------------------------- パターン1 ^[0-9]   →  文字列の先頭が0~9か判定 {10,11}   →  10~11回繰り返す(繰り返すというのは[0-9]かどうかということでしょうか?)           12文字目に文字を入れた下記文字列でもfalseが返ってきました。           解釈が間違えている?           String aaa = "0123456789a"; $      →  文字列の最後が[0-9]を10~11回繰り返しているかどうか? パターン2 ^[0-9]   →  文字列の先頭が0~9か判定 +$ →  文字列の最後が???? すいません自分で書いてて混乱してきました。 どなたかアドバイス下さい。

    • ベストアンサー
    • Java
  • Javascript 全角カナ+半角スペース+全角スペースの正規表現について

    初歩的な質問をしてすみません。 一応、自分でも試行錯誤で if (str.match(/[^ア-ンー\- ]+/g)){ alert("フリガナの項目を「全角カタカナ」のみで入力して下さい。"); } という条件を作ってみたのですが、半角スペースを入力したらTrueとなってしまいます。 全角カナ+半角スペース+全角スペース以外はFalseとなる正規表現を教えていただけないでしょうか。 以上、よろしくお願いします。

  • データ型について

    VBに限ったことではないのですが、 データ型には、短整数型、整数型、長整数型、単精度浮動小数点数型、倍精度浮動小数点数型といろいろな型がありますが、 整数を扱うなら長整数型、小数も含めて扱うなら倍精度浮動小数点数型 を使えば良いと思うのですが、それにより桁数の小さな短整数型、整数型とかは何のためにあるのでしょうか? あまり大きな値を扱わないときにそちらの型を選ぶメリットは何なのでしょうか?

  • 英数字と記号の正規表現

    英数字と記号の文字であれば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
  • アクセスのデータ型。数値型についてお聞きしたいのですが・・・

    アクセスのデータ型。「数値型」ですが、「フィールドサイズ」に (1)バイト型(0~255の範囲。小数点以下の数値は扱えない) (2)整数型(-32,768~32,767の範囲。小数点以下は扱えない) (3)長整数型(-2,147,483,648~2,147,483,647の範囲。小数点以下は扱えない) (4)単精度浮動小数点型(-3.402823×10^38~3.402823×10^38の範囲。             小数点以下の数値が扱える) (5)倍精度浮動小数点型(-1.79769313486231×10^308~-1.79769313486231×            10^308の範囲。少数点以下の数値が扱える) (6)十進型(-10^28-1~10^28-1の範囲。小数点以下の数値が扱える) と6種類決められますが、それぞれの「選び方の違い」と「その理由」を 教えてください。 たとえば、(1)~(3)くらいなら分かります。 扱える数値の桁数が違うということですよね?で、(1)~(3)を選ぶ時と(4)~(6)を 選ぶときで大きな違いというと、「小数点以下の数値が扱えるかどうか」 ですよね?そういう認識であっているか・・・ということと、上記の(1)~(6)を 「選び分ける必要がある場合」というのを教えてください。 なぜ、このような6種類に分かれているのか、人に説明しないとなりません。 よろしくお願い致します。m(_ _)m

  • excelで半角数値の有無をチェックする関数

    セルの内容に半角数字が1文字でも入っていればTRUE,なければFALSEを返すような関数はありますか? ない場合,どうすれば実現できるでしょうか? (例) 1丁目2-3 …TRUE 1丁目2-3 …TRUE ("1"が半角なので) 1丁目2-3 …TRUE ("3"が半角なので) 1丁目2-3 …FALSE (数字はすべて全角なので)

  • 正規表現-数字

    VB6で開発しています。 ひとつのテキストボックスがあり(MAXLENGTHが4)、 半角数字or小数点しか入力できないように制御しています。 下記正規表現確認関数で、 00.0~99.9の値のみ認証したいのですが、 (チェック前に Format( XX , '00.0')に変換してます) ○ 3 ○ 3.3 ○ 33 ○ 33.3 × 3.33 × .333 × 333 △ 3.00 → 3.0に変換させる パターンマッチング (\d{1,2}.\d|\d{1,2})ですと 本来×の333がOKとなってしまいます。 正規表現が間違っているのでしょうか? アドバイスお願いします。 関数はこちら Public Function RegExpCheck(ByVal ChkString As String, _ ByVal RegPattern As String) As Boolean '(一部省略) '引数:ChkString 正規表現確認対象文字 ' RegPattern パターン '戻り値:True マッチしている ' :False マッチしていない、あるいは文字・パターンが空白 '(一部省略) Dim reg As New RegExp RegExpCheck = False On Error GoTo RegErr '引数空白チェック・・・空白の場合はFalseを返す '対象文字列 If Trim$(ChkString) = vbNullString Then Exit Function End If 'パターン If Trim$(RegPattern) = vbNullString Then Exit Function End If reg.Pattern = RegPattern If reg.Test(CStr(ChkString)) = True Then RegExpCheck = True End If Exit Function RegErr:

  • ビットデータをJavaで簡単に扱う方法

    Javaでビットデータを簡単に扱う方法を探しています。 次のファイルがあるとします。 ファイルは次のフォーマットで構成されています。 固定長40bit×n 1~6bit:未使用 7~8bit:データ型判断用指標 9~24bit:整数1 25~40bit:整数2 9~40bit:整数3 9~40bit:単精度浮動小数点数 この時、次の条件に則ってファイルから数値データを取得します。 データ型判断用指標がオンオンの時、整数1 データ型判断用指標がオンオフの時、整数2 データ型判断用指標がオフオンの時、整数3 データ型判断用指標がオフオフの時、単精度浮動小数点数 上記を出来れば自前でのビット操作を行わずに実装したいという思いがあり、 いわゆるビットフィールド的な物が無いかと探してみたのですが、 なかなかそれらしき物が見つからずに困っています。 ご存知であればお教えいただければ幸いです。

    • ベストアンサー
    • Java