1

ng-patternで使用しようとすると、1つの奇妙な問題に直面していますinput type number.

<input type="number" name="input" min="0" max="1000" data-ng-model="input" ng-pattern="/^[0-9]*$/">
    <div data-ng-if="Form.input.$error.pattern">Please enter an Integer number between 0 and 1000.</div>
</div>

定義された正規表現に従って、ユーザーが入力したときにエラーが表示されるはず1.です。右?

ただし、タイプの場合はエラーが表示されませんが1.、入力の場合はエラーが表示されます。1.11.

ここに欠けているものはありますか?

4

2 に答える 2

3

0 から 190 (190.0000 を含む) までの数値を許可するtype="text"には、次の正規表現を使用します。

^(?:(?:\d{1,2}|1[0-8]\d)(?:\.\d+)?|190(?:\.0+)?)$

デモを見る

  • ^- 文字列アンカーの先頭 (文字列の先頭にある場合のみ残りと一致し、それ以外の場合は一致しません)
  • (?:(?:\d{1,2}|1[0-8]\d)(?:\.\d+)?|190(?:\.0+)?)-グループ化のみに使用され、キャプチャされたテキストを記憶しない非キャプチャ グループ。2 つの選択肢が含まれています。
    • (?:\d{1,2}|1[0-8]\d)(?:\.\d+)?:
      • (?:\d{1,2}|1[0-8]\d)- 1 つまたは 2 つの任意の数字 ( \d{1,2})、または1その後に0, 1...8が続き、その後に任意の 1 つの数字が続きます。
      • (?:\.\d+)?- オプションで ( 1 回または 0 回一致?することを意味します) ドットと 1 つ以上の数字に一致します。
    • 190(?:\.0+)?- に一致190し、オプション.で 1 つ以上の0文字に一致します。
  • $- 文字列の末尾をアサートします (前のパターンの後にさらに文字がある場合、一致は見つかりません)。

効率と動作に目に見える変更を加えることなく、非キャプチャ グループをキャプチャ グループに置き換えることができます。ただし、キャプチャ グループは、キャプチャしたテキストを何らかのバッファに保持するため、遅くなるはずです (実際には重要ではありません)。また、パターンで後方参照が使用されている場合 (すでに一致した部分文字列を一致させたい場合) には、キャプチャ グループが必要ですが、ここではそうではありません。

于 2015-09-17T05:24:39.163 に答える
0

あなたの正規表現は私にとって完璧に機能します。

<input type="number" name="input" min="0" max="1000" data-ng-model="input" ng-pattern="/^[0-9]*$/">
    <div data-ng-if="Form.input.$error.pattern">Please enter an Integer number between 0 and 1000.</div>
</div>

デモ リンクは次のとおりです: http://plnkr.co/edit/HV2PAPP2gh6cH8KXyYav?p=preview

于 2015-09-16T12:26:16.560 に答える