1

尝试使用ng-patternwith时遇到一个奇怪的问题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.1为什么不1.呢?

我在这里缺少什么吗?

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 回答