Javascript 当用户在Angular中使用正则表达式仅输入0或0.0时,如何显示错误消息?

Javascript 当用户在Angular中使用正则表达式仅输入0或0.0时,如何显示错误消息?,javascript,html,angularjs,regex,Javascript,Html,Angularjs,Regex,我对输入字段有特殊要求 它不应该允许值0,但应该允许值0.123、0.1、1.0 它不应该允许任何字符串 使用正则表达式可以实现这一点吗?或者我需要编写一个自定义JavaScript函数来验证条件 这就是我尝试过的 ng-pattern="/^[0-9]+([.][0-9]+)?$/ Fiddler Link您可以通过在正则表达式中添加一个负前瞻来限制输入: ng-pattern="/^(?!0+(?:\.0+)?$)[0-9]+([.][0-9]+)?$/"

我对输入字段有特殊要求

  • 它不应该允许值0,但应该允许值0.123、0.1、1.0

  • 它不应该允许任何字符串

    使用正则表达式可以实现这一点吗?或者我需要编写一个自定义JavaScript函数来验证条件

这就是我尝试过的

ng-pattern="/^[0-9]+([.][0-9]+)?$/

Fiddler Link

您可以通过在正则表达式中添加一个负前瞻来限制输入:

ng-pattern="/^(?!0+(?:\.0+)?$)[0-9]+([.][0-9]+)?$/"
              ^^^^^^^^^^^^^^^^
(?!0+(?:\.0+?$)
如果用户键入零(可选后跟
+零),则反向前瞻将导致匹配失败(并将导致出现错误消息)

更多详细信息

  • ^
    -字符串的开头
  • (?!0+(?:\.0+?$)
    -不能有一个或多个零可选地跟在
    +一个或多个零后面
  • [0-9]+
    -1+位
  • ([.][0-9]+)?
    -可选的
    +1+位序列
  • $
    -字符串结束

试试
ng pattern=“/^(?0+(?:\.0+)?$)[0-9]+([.][0-9]+)?$/”
。谢谢。它起作用了@WiktorStribiżewgreat回答,你能解释一下非捕获组
(?:\.0+)
与正常组
([.][0-9]+)?
的区别吗?这只是一种习惯:非捕获组(
(?:…)
)不将捕获的文本存储在内存缓冲区中,而捕获组(
(…)
)将。所以,这是一个纳米优化,如果你认为它更可读,你可以使用一个捕获组。谢谢你的详细解释@WiktorStribiżew