2009-07-26 6 views
0

正規表現では、0から24までの時間エントリを0.25の倍数で制限する正規表現が必要です。以下の条件を満たしている必要がありますのでご注意ください:正規表現時間を15分単位で許容する

  • 全体の一部が0〜23で、全体の一部が24である場合には小数部が0.0、0.25、0.5、または0.75
  • することができ何の全体部分が存在しない場合は、小数部分は、小数部分は0.0、0.25、0.5、または0.75
  • 空の文字列が

を0.0

  • 許可されていないする必要がありますすることができますI次の表現が強化されることを非常に確信していますが、これはplaにあるものですこれまでCE:

    (^(([0-9])|(1[0-9])|(2[0-3]))(\.((0*)|(250*)|(50*)|(750*)))?$)|(^24(\.0*)?$)|(^\.((0+)|(250*)|(50*)|(750*))$) 
    

    更新:正規表現の検証は、クライアント(ジャバスクリプト)とサーバ(asp.net、C#の)の両方に存在します。

  • +0

    同じ時刻であるため、24.0と0.0は論理的に見えません。 – caf

    +0

    @caf:時間ではなく期間を登録している場合を除きます。 1日単位の登録システム。私は真剣に誰も "24"オプションを使用する必要がないことを願っています:) – Thorarin

    +0

    確かに、しかし、0.0の長さの予約は少し魚のように聞こえる。 – caf

    答えて

    11

    正式にこれを正式に行う必要があるのはなぜですか?番号に変換し、いくつかの基本的なチェックを行う方がはるかに簡単です。

    数値に4を掛けた数値が自然数< = 96であることを確認してください。

    あなたのプロフィールで判断するとおそらく.NETが使用されています。私はあなたがクライアント側の検証のためにそれを使用しているので、これを正規表現として望んでいると仮定します。クライアント側のJavaScriptでCustomValidatorを使用することを真剣に検討します。 JavaScriptのためのこれらの線に沿って

    何か:

    <script type="text/javascript"> 
    function checkDuration(text) 
    { 
        var tmp = parseFloat(text) * 4; 
        return tmp >= 0 && tmp <= 96 && Math.ceil(tmp) == tmp; 
    } 
    </script> 
    

    編集:私は山車を使用した場合、エラーを丸めについて少し心配していたが、すべての可能な場合のために大丈夫動作するように思えます。

    +0

    +1:ええ、文字列の条件に一致する数値を検索していても(アンカーで判断していない)、数値を一致させてコールバック関数で検証する方が良いでしょう。 – Blixt

    +0

    @Thorarin - 良いアイデア。あなたの質問に答えるために、Regexは私にとって合理的な選択肢のように思えました。検証は、クライアント(javascript)とサーバー(asp.net、c#)の両方に存在します。ありがとう。 –

    +0

    良いこと私はあなたのCustomValidatorに適応できるJavaScript実装を書いていました:) – Thorarin

    4
    ^((1?\d|2[0-3])?(\.(0|[27]?5)0*)|(1?\d|2[0-4])(\.0*)?)$ 
    
    +0

    +1の努力。私はそれがlookbehindアサーションを使用しないので、これがより好きです。より多くの正規表現の実装と読みやすく、構文的に互換性があります。 – Thorarin

    +0

    +1 - うまくやった、それは私の試みよりもはるかに良い。私はこれに賛成する私を削除するつもりです。 – Tomalak

    関連する問題