入力した年(整数フィールド)が正確に4桁であることを確認するために、検証として正規表現を使用しています。式regex(。、 '[0-9] {4}')はCommcareでは機能しませんが、 http://www.regexr.com/ 、[0- 9] {4}は機能します。 Commcare機能には何が欠けていますか?
ここにはいくつかの問題があります。
通常、正規表現はCommCare内の文字列フィールド(「テキスト」、「電話番号または数値ID」、隠し変数など)にのみ使用されます。 「整数」フィールドで検証を行う場合は、数値制約を使用することをお勧めします。私がこれを行う方法は次のとおりです。
. >= 1000 and . <= 9999
4桁の番号を0で開始できるようにする場合は、「電話番号または数値ID」データ型を使用する必要があります。 (整数をゼロで始めることはできません)。その後、正規表現はほとんど機能します。
現在、これは、文字列に4桁のシーケンスanywhereを含む任意の文字列に一致します。正確に4桁の数字を含む文字列のみを照合する場合は、^(文字列の先頭)および$(文字列の末尾)文字を追加する必要があります。したがって、完全な表現は次のようになります。
regex(., '^[0-9]{4}$')
ハッピーマッチング!
その正規表現は機能するはずですが、文字列値を格納する質問タイプでのみ機能します。
質問タイプには整数が格納されるため、正規表現は機能しません。ただし、整数の質問の4桁の値を検証するには、次の式も使用できます。
。 > = 1000および。 <= 9999
また、余談ですが、正規表現の[0-9]の代わりに\ dを使用できます。そのため、正確に4桁で検証したい文字列の質問がある場合、次を使用できます。regex(。、 '^\d {4} $')
おそらく、CommCareは{n}
表記をサポートしていませんか? (すべての正規表現の実装が同じというわけではありません)。代わりに[0-9][0-9][0-9][0-9]
を試すことができます。