1

次の形式の日付と時刻を持つ文字列を読み取るのに苦労しています。

YYYYMMDDHHmmSS.FFFF[+|-]ZZzz
  • YYYY年です、
  • MM月(01から12から開始)、
  • DD日(01-31)、
  • HH時間(00-23)、
  • mm分(00-59)、
  • SS2番目(00-59)、
  • FFFF秒の分数(0000-9999)であり、
  • ZZzzは、協定世界時(UTC)からの時間(ZZ – + 14から–12の値)と分(zz –値00から59)の差です。

これはHL7で日時情報を転送するための標準ですが、心配する必要はありません。私が抱えている問題は、この標準用に作成した正規表現を処理するシステムが、2番目のフィールドの後にドットを追加することを拒否していることです。また、ZZフィールドの前のプラスまたはマイナスは許可されません。

これが私が書いた正規表現です:

/^(1|2)\\d{3}(0[1-9]|1[0-2])(0[1-9]|(1|2)[0-9]|3(0|1))((0|1)[0-9]|2[0-3])[0-5][0-9][0-5][0-9]\\.\\d{4}((\\+|\\-)0[0-9]|\\-1[0-2]|\\+1[0-4])[0-5][0-9]$/

Limesurveyの場合、特定の質問の検証フィールドの場合。それが何であるかわからない場合は、その正規表現がPerlの規則を使用していることを知っておいてください。

\。または\+\-を削除すると、正常に機能することに注意してください(ただし、正規表現は標準を適用しなくなります)。また、バックスラッシュをエスケープしないようにしましたが、それでも何も起こりません。

なぜこれが機能しないのか誰かが指摘できれば、私はそれをいただければ幸いです。正規表現で奇妙または冗長に見えるものがある場合は、読みやすくするために論理的にさまざまなフィールドに分割している可能性が高いことに注意してください。

4

1 に答える 1

1

+14 から -12 の部分まで、正規表現をほとんど変更しませんでした。ここで動作することがわかります: http://www.regex101.com/r/jF1bA9

最終的な正規表現:

^(1|2)[0-9]{3}(0[1-9]|1[0-2])((0[1-9])|((1|2)[0-9])|3(0|1))((0|1)[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])\.[0-9]{4}(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-2])[0-5][0-9]$

正規表現の説明:

行頭: ^ // 行頭

年:

(1|2)[0-9]{3}

月:

(0[1-9]|1[0-2])

日:

((0[1-9])|((1|2)[0-9])|3(0|1))

時間:

((0|1)[0-9]|2[0-3])

分:

([0-5][0-9])

秒:

([0-5][0-9])

限目:

\.

秒の端数:

[0-9]{4}

+14 から -12 に一致(おそらく変更が必要なもの)

(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-2])

一致: +14 +13 +12 +11 +10 +09 +08 +07 +06 +05 +04 +03 +02 +01 +00 -00 -01 -02 -03 -04 -05 -06 -07 -08 -09 -10 -11 -12

00 - 59:

[0-5][0-9]

行末:

$


特定の言語で動作するように変更する必要があるかもしれません ( のようないくつかの領域で二重のバックスラッシュがあるのを見ました\\d)

于 2013-01-17T01:13:20.647 に答える