ジメジメする梅雨のお悩み、一挙解決! >>

Javaのjava.util.regex.Matcherクラスと
java.util.regex.Patternクラスを使用して正規表現を使った
数値の入力チェックを行いたいと思っています。

行いたいチェックは下記の通りです。

【内容】
整数5桁以内で入力
小数部は1桁、ただし小数部は任意入力

例:
1234 => OK
12345 => OK
123456 => NG

12345. => NG
12345.1 => OK
12345.12 => NG

色々考えてみましたが
小数部が任意入力の事もあり、
うまく実現できずに困っています。

このような場合どのような正規表現を組めば良いでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

[0000.1]


をOKとするか否かによりますが、
わたしはNGとするほうが自然で好きです。

なので正規表現は少し複雑になって以下のようになります。
^(([1-9]\\d{0,4})|0)(\\.\\d)?$
    • good
    • 4
この回答へのお礼

回答ありがとうございました。
ここまでできるなんて
正規表現は奥が深いですね。
きちんと勉強するようにします。

お礼日時:2006/02/15 23:50

^\d{1,5}(\.\d)?$


でどうでしょう
    • good
    • 0
この回答へのお礼

お答えいただきありがとうございました。
参考になりました。

お礼日時:2006/02/15 23:49

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q数値チェック

すみません、どなたか教えて下さい。

あるデータが数値かどうかのチェックをかけたいのですが、どのようにしたらよいでしょうか?
※数値は整数だけじゃなく、少数、負の数も存在します。
現在は下記のように、負の数だとNGになってしまいます。

String kekka = "OK";
int intChk = 0;
for (int i = 0; i < value.length(); i++) {
char c = editvalue.charAt(i);
char c1 = '0';
char c2 = '9';
if ((c < c1 || c > c2) && ( c!='.') ) {
intChk = intChk + 1;
}
}
if (intChk == 1){
kekka="NG";
}

Aベストアンサー

単純に数値(少数と負の数を含む)のチェックであれば、parseDoubleだけでよいと思います。
Double型でなければ、すべてcatchします。

String kekka = "OK";
try {
Double.parseDouble(value);
} catch (Exception e) {
kekka = "NG";
}

Q小数点入力チェック

以下の処理を入力チェックしたいのですが、どうしたら宜しいのでしょうか?お願いします。

num="1.999" →OK
num="1.11" →OK
num="1" →OK
num="11.11" →NG

if(!num.match(/[0-9]*\.[0-9][0-9][0-9]+/)){
alert("小数点形式[0.001~9.999]の範囲で入力してください。");
return;
}

Aベストアンサー

ちょっと意図が不明瞭な部分がありますが
・0<num<10
・numは小数点3桁まで
という条件でしたら

if (!num.match(/^[0-9](\.[0-9]{1,3})?$/)) {

だと思います。
正規表現は便利です。より調べられることをおすすめします。

参考URL:http://www.tohoho-web.com/js/regexp.htm#Expression

Q実数からの小数部の取得

いつも参考にさせて頂いております。

実数から小数部分のみを取り出す良い方法はないでしょうか?
1.25→0.25(もしくは25)となるような。

よろしくお願いします。

Aベストアンサー

 まず、DoubleクラスのintValue()メソッドを使えば、整数部がはじける。
 IntegerクラスのdoubleValue()メソッドを使えば、そのint値をdouble値に変換できるので、元のdouble値と演算できるね。具体的なサンプルを用意したので参考にして欲しい。

public class A {
public static void main(String[] args) {
Double d = new Double(1.25);
Integer i = new Integer(d.intValue());
Double d2 = new Double(i.doubleValue());
System.out.println(d.doubleValue());
System.out.println(d2.doubleValue());
System.out.println(d.doubleValue() - d2.doubleValue());
}
}

Qテキストボックスに数字しか入力できないようにするには?

タイトルの通りなのですが、あるテキストボックスに数字しか入力できないようにしたいのですが可能でしょうか?また、

「あいうえお 12345 「」:・、¥・」

というような文字列をコピーし、そのテキストボックスにペーストした際にも数字の12345だけが残るといった事も実現したいのですが…

どなたかご存知の方いらっしゃいましたら教えて頂けると幸いです。

Aベストアンサー

>英数字

では、こんな感じで

<input type="text" onKeyup="this.value=this.value.replace(/[^0-9a-z]+/i,'')">

QJavaで文字列をゼロ埋め(ゼロパディング)

Javaで文字列を前ゼロで埋め(ゼロパディング)たいのですが、
exceptionが発生してうまくいきません。
だれかお助け頂けたら助かります。

(例)123の前に0を5つ結合したい場合、

String str2="123";
String str = String.format("%08s",str2);

で問題無いと思ったのですが、
exceptionが発生してしまいます。

回答お待ちしております。

Aベストアンサー

そのExceptionはどういったExceptionなのか把握されてますか?
何が悪いのかの理由もそのExceptionからわかると思いますが。

http://docs.oracle.com/javase/jp/6/api/java/util/Formatter.html#syntax
をよく読んで"%08s"という指定ができるのかどうか確認しましょう。

やられたいことは"123"の先頭に"00000000"をつけて後ろから8文字取り出せばできると思いますが。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

Qyyyymmddからyyyy/mm/ddへの変換

いつもお世話になっております。
Aと言う変数にはyyyymmddの値が入っていて
Aをyyyy/mm/ddにしてBの変数に入れたい場合の処理がわかりません。
調べたところ、SimpleDateFormatクラスと言うものを使えばよいと言うことが判明しました。
しかし、今まで使ったことがないのでよくわかりません。
変数Aと変数BはどちらもString型です。
ご教授お願い致します。

Aベストアンサー

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.parse(a);
  formatter.applyPattern("yyyy/MM/dd");
  String b = formatter.format(date);
  System.out.println(b);
}
catch (ParseException ex) {
  System.out.println("解析失敗");
}

 こんな感じでいいんじゃないでしょうか。

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.p...続きを読む

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報