2012-01-02 18 views
2

HH:mmの形式で時刻を入力できるテキストボックスがあり、エントリは24時間形式でなければなりません。すべての無効なエントリに対して、共通のメッセージ「無効なエントリ」が表示されます。例えばのために時刻エントリの正規表現検証

19:61 //INVALID 
12:00am //INVALID 
12***M //INVALID 

06:00 //VALID 
22:00 //VALID 
5:45 //VALID 

必要なコードはJavaです。 正規表現に慣れていないので...あなたのアイデアが必要です。事前に確認してください! :)

String timeStr = getTimeBoxValue(); 
+0

このregexpが必要です: '^(([0-9])|([0-1] [0-9])|([2] [0-3])):(([0-9 ])|([0-5] [0-9]))$ ' – ash108

+0

あなたはグーグルで行ったことがありますか? – vikky

+0

@ ash108:式の仕組みを説明できますか? – user656523

答えて

5

使用できるLink があります。あまりにも

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Time24HoursValidator{ 

    private Pattern pattern; 
    private Matcher matcher; 

    private static final String TIME24HOURS_PATTERN = 
      "([01]?[0-9]|2[0-3]):[0-5][0-9]"; 

    public Time24HoursValidator(){ 
     pattern = Pattern.compile(TIME24HOURS_PATTERN); 
    } 

    /** 
    * Validate time in 24 hours format with regular expression 
    * @param time time address for validation 
    * @return true valid time fromat, false invalid time format 
    */ 
    public boolean validate(final String time){ 

     matcher = pattern.matcher(time); 
     return matcher.matches(); 

    } 
} 
+0

ありがとう!あなたが提供したリンクをチェックアウトします! :) – user656523

+0

@Vikky私は同じフォーマットを検証する必要があります。私の場合、私は厳密にhh:mmの時間を検証する必要があります。だから私の場合は、01:30は検証されるべきですが、1:30はそうではありません。私は正規表現のハングを取得しようとしているが、十分に快適に感じることはありません。あなたはいくつかの入力を与えてくださいください – bluelurker

1

ash108で正規表現を説明します。■コメント:文字列の先頭に

^(([0-9])|([0-1][0-9])|([2][0-3])):(([0-9])|([0-5][0-9]))$ 

^ ...

([0-9])|([0-1][0-9])|([2][0-3])は...数0-9がなければなりませんOR a(最初の0-1と0-9の数字)OR(最初の2と0-3の数字)

:記号がある必要があります。

([0-9])|([0-5][0-9])次いで数0-9 OR(第0-5と番号、次いで0-9)

$が存在しなければならないし、次にストリング

の端が存在しなければならない存在でありますあなたがそれを調べるならば、この表現でちょっと変わったこと。 :記号の後の部分を見てください。それは1桁の0〜9を許すでしょう。したがって、例12:5のような文字列が有効です。芋この部分はおそらく結果として除去しなければならない:記号1つのまたは2つの数字を持つことができます。

^(([0-9])|([0-1][0-9])|([2][0-3])):([0-5][0-9])$ 

さて、後の部分:前の部分が、一方で符号が、2桁の数字を持っていることを余儀なくされます。

+0

いいキャッチ!説明のためのthx。本当に便利です:) – user656523