3

ユーザーが mm:hh の形式で時間を入力する入力フィールドがあります。フォーマットはフィールド内で指定されています (デフォルト値は 09:00) が、フォーマットが正しいかどうかを確認するためにクライアント側のチェックを実行したいと考えています。

既存のクライアント側の検証は jQuery にあるので、これも jQuery に残しておきたいと思います。

私は主に PHP プログラマーなので、これを最適な方法で作成するための助けが必要です。

個々の文字 (最初の 2 桁 = 数字、3 番目 = ':'、最後の 2 桁 = 桁) を確認できることはわかっていますが、時間数が 23 と分を超えていないことを確認しながら、よりエレガントに行う方法はありますかcount が 59 より大きくないか?

PHP では正規表現を使用しますが、jQuery にも似たようなものがあると思いますか?

このようなものは私には理にかなっています:

([01]?[0-9]|2[0-3]):[0-5][0-9]

しかし、jQuery 構文にあまり詳しくないので、どうすればよいかわかりません。

4

4 に答える 4

10

JavaScript でも正規表現を使用できます。

http://www.w3schools.com/jsref/jsref_obj_string.asp

.search() を使用 - http://www.w3schools.com/jsref/jsref_search.asp

または .match() - http://www.w3schools.com/jsref/jsref_match.asp

または .replace() - http://www.w3schools.com/jsref/jsref_replace.asp

編集:

<script>
    var regexp = /([01][0-9]|[02][0-3]):[0-5][0-9]/;
    var correct = ($('input').val().search(regexp) >= 0) ? true : false;
</script>

EDIT2:

ここでは、javascript での regexpobject のドキュメント:

http://www.w3schools.com/jsref/jsref_obj_regexp.asp

<script>
    var regexp = /([01][0-9]|[02][0-3]):[0-5][0-9]/;
    var correct = regexp.test($('input').val());
</script>

EDIT3:

正規表現を修正

于 2012-04-16T11:59:59.123 に答える
4

JavaScript では、正規表現は で区切られ/ます。だからあなたはするだろう...

var isValidTime = /([01]?[0-9]|2[0-3]):[0-5][0-9]/.test(inputString);

あなたの正規表現は、HH:mm 形式で 24 時間を検証するのに理にかなっているようです。ただし、アンドレアスの回答の下にあるコメントで述べているように、文字列の一部が一致する場合、これは true を返します。文字列全体を検証するには、アンカーを使用して文字列の最初と最後を一致させます。

var isValidTime = /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(inputString);

実際に一致を取得するには、string.matchJS 関数を使用する必要があります。

ああ、jQueryはJavascriptであることに注意してください。これは、非常に便利なものを集めた単なるライブラリです。ただし、この例には jQuery ライブラリへの参照が含まれていません。

于 2012-04-16T12:03:00.327 に答える
2

yourstring.match(regexp)JavaScript では、文字列を正規表現と照合するために使用できます。

私は RegEx の経験が非常に限られているため、パターンについてお手伝いすることはできませんが、そのセットがあればそれで十分です.match()

于 2012-04-16T12:00:34.620 に答える
1

別のアプローチですが、正規表現の代わりに追加の JavaScript ライブラリを使用します。

var valid = moment(timeStr, "HH:mm", true).isValid();

プロジェクトで既にmoment.jsを使用している場合、マイナス面はないと思います。

また、正規表現を使用して回答を具体的に要求したわけではないので、言及することは有効だと思います。

于 2016-11-02T21:20:28.357 に答える