1

編集:ご意見をお寄せいただきありがとうございます。あなたの答えは正しかったのですが、私はそれを十分に明確に説明していないと思いました。

入力中に入力値を確認したい. ユーザーがリストにない他の文字を入力している場合、入力した文字はロールバックする必要があります.

(入力全体が入力されたら、チェックする必要はありません)。

    文字のみを含む日付入力フィールドを検証したいのですが0-9[digits], -(hyphen) , .(dot),/(forward slash).Date は22/02/1999or22.02.1999またはのよう22-02-1999になる可能性があります。発生または位置のいずれかで検証を行う必要はありません。上記の文字以外の文字があるかどうかを確認するには、単純な検証で十分です。【正規表現が苦手です。】

これは私がうまくいくはずだと思ったものですが、そうではありません。

  var reg = new RegExp('[0-9]./-');

ここにjsfiddleがあります。

4

3 に答える 3

6

式は、文字列内の任意の場所で、数字の後に任意の文字 (.メタ文字) が続くかどうかのみをテストし/-ます。たとえば、5x/-または42%/-foobar一致します。

代わりに、すべての文字を文字クラスに入れ、文字列内のすべての文字がそれらの 1 つであるかどうかをテストします。

var reg = /^[0-9.\/-]+$/
  • ^文字列の先頭に一致
  • [...]文字がグループに含まれている場合に一致します (つまり、任意の数字、./または-)。
    /正規表現リテラルの終わりも示すため、エスケープする必要があります。
    -between two characters は、文字の範囲を表します (それらの間、たとえば0-9またはa-z)。が最初または最後にある場合-、特別な意味はなく、文字通りハイフンとして解釈されます。
  • +量指定子であり、「前のパターンの場合は 1 つ以上」を意味します。これにより、(アンカーと一緒に)文字列のすべての文字が文字クラスに含まれているかどうかをテストできます。
  • $文字列の末尾に一致

または、許可されていない文字があるかどうかを確認できます。

var reg = /[^0-9.\/-]/;

文字クラスの^先頭の はそれを否定します。ここでは、文字列のすべての文字をテストする必要はありません。文字だけが異なるだけで文字列が無効になるからです。

次のように使用できます。

if (reg.test(str)) { // !reg.test(str) for the first expression
    // str contains an invalid character
}
于 2013-08-21T13:19:34.930 に答える
3

これを試して:

([0-9]{2}[/\-.]){2}[0-9]{4}
于 2013-08-21T13:20:27.607 に答える
2

日付の有効性を気にしない場合は、次の正規表現を簡単に使用できます。

^[0-9]{1,2}[./-][0-9]{1,2}[./-][0-9]{4}$

文字クラス[./-]では、角括弧内の任意の文字を使用でき、量指定子では 1 桁または 2 桁の月と日付を使用できますが、年は 4 桁しか使用できません。

次のように、最初のいくつかのグループをグループ化することもできます。

^([0-9]{1,2}[./-]){2}[0-9]{4}$

最初の正規表現でフィドルを更新しました。

于 2013-08-21T13:20:05.167 に答える