Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式问题:不允许单点(仅当点前有数字或点后有数字时才允许)_Javascript_Angular_Regex - Fatal编程技术网

Javascript 正则表达式问题:不允许单点(仅当点前有数字或点后有数字时才允许)

Javascript 正则表达式问题:不允许单点(仅当点前有数字或点后有数字时才允许),javascript,angular,regex,Javascript,Angular,Regex,我希望允许用户键入以下十进制或整数值(A) 这是我使用的以下正则表达式: factor: /^-?\d*[.]??\d*$/, 但问题是上面的正则表达式也允许以下无效数字(B) 也不允许用户类型为负值,即-3,-0.5 我试图修改上面的正则表达式,使其不允许(B)处的无效值,但允许(A)处的值 我的尝试无效: factor: /^-?\d*[.]+\d*$/, 试试这个正则表达式^-?[1-9]*\.?\d+$ 括号表示可以有0位或1位。请尝试以下正则表达式: ^-?[1-9]*?0?(

我希望允许用户键入以下十进制或整数值(A)

这是我使用的以下正则表达式:

factor: /^-?\d*[.]??\d*$/,
但问题是上面的正则表达式也允许以下无效数字(B)

也不允许用户类型为负值,即-3,-0.5

我试图修改上面的正则表达式,使其不允许(B)处的无效值,但允许(A)处的值

我的尝试无效:

 factor: /^-?\d*[.]+\d*$/, 

试试这个正则表达式
^-?[1-9]*\.?\d+$


括号表示可以有0位或1位。

请尝试以下正则表达式:

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

您可以匹配可选的连字符,然后断言字符串不以2个零开头

然后匹配可选数字、可选点和匹配1+数字,以防止匹配空字符串

^-?(?!00)\d*\.?\d+$
  • ^
    字符串的开头
  • -?
    匹配可选
    -
  • (?!00)
    负向前看,不直接在右边断言2个零
  • \d*
    匹配0+位
  • \.?
    匹配可选
  • \d+
    匹配1+个数字
  • $
    字符串结尾

const regex=/^-?(?!00)\d*\.?\d+$/;
[
".5",
"0.500",
"3",
"0",
"0.0",
"30",
"500000",
"4000.22",
".",
"00.5",
"0000.5",
"00",
"-4000",
"-0",
"-00",
".",
", ",
"00.4"

].forEach(s=>console.log(`${s}-->${regex.test}`)您可以使用以下表达式,该表达式根据点之前的数字计算点

^-?(((?!00)\d+(?:\.{1}\d*)*)|((?!00)\d*(?:\.{1}\d+)))?$

谢谢你。嗨,我刚刚编辑了我的问题。也希望允许超过1位数字,但不希望允许无效数字。所以“00”、“00.”、“00.4”是无效的数字。我们也希望用点来表示零。ThanksI还希望允许0。值(带点的零)。因为当用户用一个等同于0的点键入0时,我不想显示错误,只是编辑了问题。我也想为零和一个点工作。上述正则表达式适用于所有情况,我想知道是否有可能缩短正则表达式的长度?如果正则表达式使用零,您可以删除
(?!00)
,即
^-(\d+(?:\.{1}\d*)*))|(\d*(?:\.{1}\d+))$
。。。这个正则表达式很长,因为我根据小数点前的值有条件地重复了正则表达式。。。不确定我们是否能减少它。。。如果得到任何其他解决方案,我会更新此答案。我也会尝试找到任何其他解决方案来缩短正则表达式长度。如果您知道,请让我知道。谢谢你编辑了这个问题。我也想为零和一个点工作。Thanks@user21-允许
x.
大小写似乎并不直观
x.
不是正确的表示法,它等同于整号
x
。从另一条评论看来,您不想显示错误,但如果我更改正则表达式,它可能会匹配其他不正确的情况!我理解x。不是正确的表示法,但我希望用户在键入x时不要看到错误,这就是为什么我不想在这种情况下显示错误。也许在用户完成键入后,如果值是x,我将创建一个函数来添加x.0,以便它是正确的值OK@user21,出于您的考虑,这是您不正确的正则表达式:
(^-?[1-9]*?0?(\.\d+)|(^\d+\.$)
^-?(?!00)\d*\.?\d+$
^-?(((?!00)\d+(?:\.{1}\d*)*)|((?!00)\d*(?:\.{1}\d+)))?$