0

ユーザーがタイムフォームを入力できるようにしたいと思います。さらに情報が必要な場合、ユーザーはこれを使用してタスクを完了するために必要な時間を表し、入力された場合はデータベースに保存されます。

これが私が持っているものです:

/^$|^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/

空のフォーム、または01:30と01:30:00のフォーマットされた時間に一致します。すべてのタスクに少なくとも1分かかるので、実際には秒は必要ありませんが、それを削除しようとすると、コードがクラッシュし、空の文字列のサポートが削除されました。正規表現はまったく理解できません。

私が欲しいのは、たとえば3:30、3:00、5のように、単純な分と単純な時間にも一致することです。これは可能ですか?これにより、ユーザーエクスペリエンスが大幅に向上し、無駄な入力が制限されます。ただし、一部のユーザーが入力するのが自然だと思う場合に備えて、ゼロはオプションのままにしておきたいと思います。

4

1 に答える 1

1

私は次のパターンがあなたが望むことをするだろうと思います:

p="((([01]?\d)|(2[0-4])):)?([0-5]\d)?(:[0-5]\d)?"

最初の部分:

(([01]?\d)|(2[0-3])):)?

00-24形式で時間を処理するオプションのグループです。

2番目の部分:

([0-5]\d)?

式に時間または秒が含まれている場合に分を処理するオプションのグループです。このグループは、分のみまたは時間のみを含む式も扱います。

第三部:

(:[0-5]\d)?

秒を処理するオプションのグループです。

次のサンプルは、動作中のパターンを示しています。

In [180]: re.match(p,'14:25:30').string
Out[180]: '14:25:30'

In [182]: re.match(p,'2:34:05').string
Out[182]: '2:34:05'

In [184]: re.match(p,'02:34').string
Out[184]: '02:34'

In [186]: re.match(p,'59:59').string
Out[186]: '59:59'

In [188]: re.match(p,'59').string
Out[188]: '59'

In [189]: re.match(p,'').string
Out[189]: ''

すべてのグループはオプションであるため、パターンは空の文字列にも一致します。Pythonでテストしましたが、最小限の変更で他の言語でも機能すると思います。

于 2012-12-06T15:21:05.373 に答える