0

いくつかの異なるフォーム検証タイプで作業していますが、ウィッシュリストのすべてのアイテムを機能させるのに問題があります。

私のcfinputのコードはこれです(通常のフォーム入力と同じように機能し、いくつかの定型のjavascript検証があります)

    <cfinput type="Text" name="negdays" 
        range="0,23" 
        pattern="^(([^0]{1})([0-9])*|(0{1}))?$" 
        message="Negative Days must be a number between 0 and 23" 
        required="No"  width="2" > 

これは、を除いて必要なものをすべて除外する必要があり$ます。フォームがを受け入れるのを止めるのに苦労してい$ます。

同様の別の例は、範囲が必要で数値を維持するための例です。そのため、検証タイプを混合しました。

    <cfinput type="text" name="achamount" 
        validate = "range,numeric" 
        range = "0,99999" 
        message="ACH Amount must be a range from 0 - 99999 and  numeric only" >

...そしてそれは完璧に機能します-1つの問題を除いて:a$は許可されます。

だから私は多分私はこのような正規表現でそれに追加できると思いました:

    <cfinput type="text" name="achamount" 
        validate = "range,numeric,regex" 
        range = "0,99999"  
        pattern="^\d" 
        message="ACH Amount must be a range from 0 - 99999 and  numeric only" > 

しかし、私のパターンはもちろん、それを数値に制限することだけです。これは私がすでに行っていることです。ドル記号を除外するパターンが必要です。しかし、特殊文字として、それは私が取り除きたい他のもののように振る舞わない。

何かアイデアや提案はありますか?私が試したものはすべて機能しないか、ページ上の他のすべての検証に失敗します。

4

3 に答える 3

2

解決策: 数字だけを一致させる

特に除外する必要はありません。$数字のみを許可するには、すべての文字が一致することを確認する必要があります\d

これを行うには、正規表現の開始と終了を入力の開始と終了に固定する必要があります。これは、正規表現のメタ文字^$それぞれで行われます。(これらの文字のいずれかをリテラルとして使用する必要がある場合は、前にバックスラッシュを付けてください。)


したがって、0 から 99999 までの整数の場合は次のようになります。

^\d{1,5}$


0 から 23 までの整数のマッチングも同じように機能しますが、24 以上にならないように、パターンの中央部分を複雑にする必要があります。

^(?:[03-9]|1\d?|2[0-3]?)$

ここでの 3 つの選択肢は次のとおりです[03-9]。 * 1 または 2 を除く任意の 1 桁の数字に一致1\d?します。*2[0-3]?は 2、または 2 の後に 3 までの任意の数字に一致します。

(?:..は、文字列全体に適用されることを)保証するためのものです。^$

(もちろん、^\d{1,2}$後で 24 未満かどうかを確認することもできます。)


おまけ情報:キャラクターを除く

上記のように、この場合はこれを行う必要はありませんが、除外する必要がある状況に遭遇した場合は$、負の文字クラスを使用して行うことができます。

^[^$]{1,5}$

または、否定的な先読みを使用します。

^(?:(?!\$).){1,5}$

この後者はもう少し複雑ですが、柔軟性が向上するため、知っておくと便利です。

先読みはアンカーの別の形式です (ある位置で一致しますが、一致する文字を消費しません)。量指定子 ({1,5}ビット) が付加された項目に対して使用する場合、正しく適用するには、両方の項目をグループ化する必要があります。(つまり(?!\$).{1,5}、否定先読みのみを行った場合、5 文字すべてではなく、最初の文字のみがチェックされます。)

「文字列アンカーの終わり」の特別な意味を防ぐために、文字クラスの外側を$エスケープする必要があることに注意してください。\$文字クラス内では、通常の文字です。

(うまくいけば、この説明は明確です - さらなる情報や明確化が役立つかどうか教えてください。)

于 2012-12-04T18:12:44.473 に答える
1

正規表現^(([^0]{1})([0-9])*|(0{1}))?$はかなり単純化できます。0 が前にある 1 桁または最大 2 桁のいずれかが必要なようです。

これを試して:^\d{2}$

于 2012-12-04T17:58:46.843 に答える
0

許可しない文字の範囲に $ を追加するのはどうですか?

pattern="[^$]"
于 2012-12-04T17:58:07.190 に答える