2012-01-11 2 views
13

入力フィールドをマスクするために正規表現に不満があります。私は入力をhh:mm AM | PM形式に制限したいので、この正規表現を動作させることはできません。jqueryのAM PM時間形式の正規表現

この正規表現は、www.ThimbleOpenSource.comのjqueryツールと組み合わせて使用​​します。 filter_input.jsツールなどでした。

シンプルな正規表現ではうまくいくようですが、思い付いたものはうまくいかないようです。以下は私のjsFiddleテストリンクです。あなたが入力フィールドのためにそれを使用している場合

jsFiddle

+1

あなたのフィドルで使っている正規表現はちょうど '[a-z]' ...正しいフィルタであると思いますか?あなたは時間形式の正規表現をグーグルで試しましたか? – ean5533

+0

質問はあなたが欲しいものです。このfilter_inputプラグインは、すべてのキーストロークの入力をチェックしているようです。しかし、あなたはtimeformatをチェックすることはできません。上記のようにtimeformatをチェックしたい場合は、blurの入力フィールドの値やフォームのsubmit(例えば)をチェックしてください。 – Armin

+1

/[0-2] [0-9]:[0-1] [0-9] AM | PM /のような正規表現を入力すると、入力ボックスに何かを書き込むと、 regexp全体での最初のキーボード入力。したがって、最初のキーボード入力として「2」と書いた場合、スクリプトは/ [0-2] [0-9]:[0-1] [0-9] AM | PM /と「2」を一致させようとします。正しい。 filter_inputは、単純な正規表現でのみ動作します。 – Kakawait

答えて

23

私は答えフォン・ユーリの正規表現に基づいて、jsfiddle例を作っています http://jsfiddle.net/Evaqk/

$('#test1, #test2').blur(function(){ 
    var validTime = $(this).val().match(/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/); 
    if (!validTime) { 
     $(this).val('').focus().css('background', '#fdd'); 
    } else { 
     $(this).css('background', 'transparent'); 
    } 
}); 
2

まず第一に、あなたは、テキストフィールドを使用して、ユーザーの入力日付や時刻の情報を聞かせてはいけませんし、それを望んでは、厳格な形式になります。

しかし、あなたが主張する場合:

/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/ 

をこの正規表現は、AM/PM形式で時間を検証します。

+0

これはjsFiddle関数私が持っているのは – SoftwareSavant

+0

@Kakawaitのコメントで書かれているように、keypress上で実行されるので、フィールド内の無効な文字を避けるためにのみ使用でき、有効なフォーマットでは使用できません。あなたの関数では、文字を指定することしかできません: '[0-9:APM]' – YuS

2

あなたはそのプラグインでそれを行うことはできませんここでは、各文字をチェックする必要があるため。

HTML:

<form> 
    <p>When?</p> 
     <input type="text" id="test1" placeholder="hh:mm(AM|PM)"/> 
</form> 

はJavaScript:

$("#test1").keypress(function(e) { 
    var regex = ["[0-2]", 
    "[0-4]", 
    ":", 
    "[0-6]", 
    "[0-9]", 
    "(A|P)", 
    "M"], 
    string = $(this).val() + String.fromCharCode(e.which), 
    b = true; 
    for (var i = 0; i < string.length; i++) { 
     if (!new RegExp("^" + regex[i] + "$").test(string[i])) { 
      b = false; 
     } 
    } 
    return b; 
}); 

+0

ねえ、それをsimpleMaskPlugginにする必要があります! – SoftwareSavant

1

だから私は、これは今では解決されたかなり確信しているが、私は最近、これで苦労してできませんでした。十分に速く答えを見つけてください。私はEonasdanのDateTimepickerと一緒にBootstrap Validator(bootstrapvalidator.com by @nghuuphuoc)を使用して1時間を有効にしています(PS:Eonasdanのプラグインで日付を無効にすることができます)。

ブートストラップ検証ツールにはまだ時間のバリデータがないので、正規表現を使用する必要があります。この1つは私のために完全に働いた:

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

+0

AMまたはPMを要求する場合は、時間> 12を許可するのは意味がありません。 – chad

+0

時間を12時間以上に制限すると、正規表現は次のようになります。 '(0?[1-9] | 1 [0-2]):[0-5] [0-9]?[APap] [mM] $ ' – lucasarruda

0

をfollwing関数の戻り値(真/偽)値

function CheckTime(HtmlInputElement) { 
     var dt = HtmlInputElement.value; 
     return (/(0?[1-9]|1[0-2]):[0-5][0-9] ?[APap][mM]$/.test(dt)); 
} 
0

も、このソリューションをチェックしてください。

<!DOCTYPE html> 
<html> 
<body> 

<p>This demo used to validate time with 12 hours format</p> 

<button onclick="myFunction()">Try it</button> 

<p id="demo"></p> 

<script> 
function myFunction() { 
    var regexp = /^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/; 
    var res = regexp.test('12:00 AM'); //try with alphabets or wrong format 
    document.getElementById("demo").innerHTML = res; 
} 
</script> 

</body> 
</html> 
関連する問題