【问题标题】:Validate <input type="number" /> with AngularJS and Pattern/RegEx使用 AngularJS 和 Pattern/RegEx 验证 <input type="number" />
【发布时间】:2019-07-04 06:04:03
【问题描述】:

我有一个数字类型的输入,我想确保它只接受一个数字。我可以在服务器端很好地做到这一点,但使用 AngularJS 我无法让它工作。

代码如下:

<input type="number" ng-pattern="/[0-9]+/" name="numOfFruits" ng-model="basket.numOfFruits" />

我怀疑这与我提供的模式有关 [0-9]+ 基本上我只想要这个文本框中的数字,任何不是由数字 0 到 9 组成的,我希望输入无效。

目前,我的输入字段将此 aa23423 视为有效输入!

【问题讨论】:

    标签: regex angularjs


    【解决方案1】:

    你需要使用锚点:

    /^[0-9]+$/
    
    • ^:起点锚点。
    • [0-9]+ 09 之间的一个或多个数字。
    • $:行尾锚。

    所以这匹配字符串的开头,然后它匹配一个或多个数字,然后它查找字符串的结尾,所以它匹配一个只包含数字而没有其他内容的字符串。

    否则,/[0-9]+/ 将仅匹配 aa23423 的一部分,更准确地说是数字 23423,因此将为您提供有效。

    【讨论】:

    • @Ciwan 那问题出在别的地方,正则表达式完全OK。
    • 谢谢我刚才也在测试中尝试了你的正则表达式,它工作得很好!!为什么它在 AngularJS 中失败:/
    • @Ciwan 不幸的是我不使用 AngularJS。我只使用正则表达式。
    • @Ciwan 你用的是什么版本的angular?
    • 这实际上不是 AngularJS 中的错误。如果Number 不是有效的Number,某些浏览器会将input[type=number] 上的值更改为'',而不是实际值。所以 Angular 将 '' 评估为 required 无效,而不是 Number 或您的正则表达式。
    【解决方案2】:

    这里是验证浮点数的正则表达式,包括正数和负数:

    /^-?[0-9]\d*(\.\d+)?$/
    

    在“文本”输入中使用此正则表达式,例如:

    <input type="text" ng-model="score" ng-pattern="/^-?[0-9]\d*(\.\d+)?$/" required/>
    

    【讨论】:

      【解决方案3】:

      模式不适用于type="number" 的输入。
      您可以使用 type="text" 并将值转换为数字

      【讨论】:

      • 如果用户输入的内容被认为是一个数字(如 type="number"),那么 pattern 将捕获其他任何内容(即,如果您指定字符串的长度,或者它是否可以包含点, 或不)。 (在 Firefox 上测试)
      【解决方案4】:

      尝试将您的正则表达式定义为范围变量 在控制器中,它对我有用。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多