JavaScript用于有效的正数和负数,带有一个点或没有点

JavaScript用于有效的正数和负数,带有一个点或没有点,javascript,regex,html,angularjs,Javascript,Regex,Html,Angularjs,我使用a只允许用户输入数字、小数和减号,但是我想更新它,使其在开始时只允许一个点和一个负号。下面是我现在拥有的,但它允许无效输入,如--1: val.replace( /[^0-9.-]+/g, ''); 我需要帮助修复正则表达式,以允许像-1、.1、-1、0.1和-0.1这样的输入,但不像-1、1.1.1、1-1、-1.、-1.、1.k 我设法只允许一个小数点,但在开始时只允许负号: val.replace(/[^\d*[0-9]\.\d*[0-9]]/g, ''); 我有一个类似的指令,

我使用a只允许用户输入数字、小数和减号,但是我想更新它,使其在开始时只允许一个点和一个负号。下面是我现在拥有的,但它允许无效输入,如
--1

val.replace( /[^0-9.-]+/g, '');
我需要帮助修复正则表达式,以允许像
-1
.1
-1
0.1
-0.1
这样的输入,但不像
-1
1.1.1
1-1
-1.
-1.
1.k

我设法只允许一个小数点,但在开始时只允许负号:

val.replace(/[^\d*[0-9]\.\d*[0-9]]/g, '');

我有一个类似的指令,我使用这个正则表达式:

/^\-?\d+((\.|\,)\d+)?$/

/^\-?\d+((\.|\,)\d+)?$/.test("1.2.2") // false
/^\-?\d+((\.|\,)\d+)?$/.test("1.22")  // true
/^\-?\d+((\.|\,)\d+)?$/.test("-1")    // true
/^\-?\d+((\.|\,)\d+)?$/.test("--1")   // false
改为

/^\-?\d+((\.)\d+)?$/

当输入有逗号而不是点时失败。

我有一个类似的指令,我使用这个正则表达式:

/^\-?\d+((\.|\,)\d+)?$/

/^\-?\d+((\.|\,)\d+)?$/.test("1.2.2") // false
/^\-?\d+((\.|\,)\d+)?$/.test("1.22")  // true
/^\-?\d+((\.|\,)\d+)?$/.test("-1")    // true
/^\-?\d+((\.|\,)\d+)?$/.test("--1")   // false
改为

/^\-?\d+((\.)\d+)?$/

当输入有逗号而不是点时失败。

您的正则表达式缺少“以”
^
开头”和“以”
$
结尾”运算符:

应该是

/^[^\d*[0-9]\.\d*[0-9]]$/g

干杯

您的正则表达式缺少“以”
^
开头”和“以”
$
结尾”操作符:

应该是

/^[^\d*[0-9]\.\d*[0-9]]$/g
干杯

试试这个:

/^-?[0-9]+(?:\.[0-9]+)?$/
试试这个:

/^-?[0-9]+(?:\.[0-9]+)?$/
您可以使用以下选项:

/^-?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+)$/
您可以使用以下选项:

/^-?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+)$/

这将处理所有测试用例:

/^-?\d*\.?\d+$/
编辑为不匹配
1.

要仅保留
-
的第一个实例,请执行以下操作:

function r(m,a,b) { return a+b.replace(new RegExp('\\'+a,'g'),''); }
"--1.2.3".replace(/(-)(.*)/g,r).replace(/(\.)(.*)/,r).replace(/[^-\.\d]/g,'')
// -1.23

这将处理所有测试用例:

/^-?\d*\.?\d+$/
编辑为不匹配
1.

要仅保留
-
的第一个实例,请执行以下操作:

function r(m,a,b) { return a+b.replace(new RegExp('\\'+a,'g'),''); }
"--1.2.3".replace(/(-)(.*)/g,r).replace(/(\.)(.*)/,r).replace(/[^-\.\d]/g,'')
// -1.23

我向你提议一些更具可读性的东西

function validateFloat(string){
    var floatString = parseFloat(value) +"";
    return (floatString !== string);
}

对你来说行吗?

我建议你读一读

function validateFloat(string){
    var floatString = parseFloat(value) +"";
    return (floatString !== string);
}


好的,对于u?

我认为
^-?\d*\。?\d+$
是适用于所有测试用例的最简单解决方案。

我认为
^-?\d*\。\d+$
是适用于所有测试用例的最简单解决方案。

在我看来,这是最可靠和最好的答案。适用于所有陈述的情况,以及
-.
-.1
@bbodenmiller它的工作原理是它与
->不匹配。
对不起,是我,因为它与tenub在你面前发布的答案完全相同。@Casimirithippolyte谢谢,我感谢你的诚实,保留否决票也很好。仅供参考,我更改答案的原因是为了回应OP的评论“我认为1.不应该被允许。”这不是因为tenub的答案。不管怎样,干杯。@Matt:我知道这不是你以前的答案,但请注意我的答案没有改变。别忘了,你可能处于特努布的处境。在我看来,这是最有力和最好的答案。适用于所有陈述的情况,以及
-.
-.1
@bbodenmiller它的工作原理是它与
->不匹配。
对不起,是我,因为它与tenub在你面前发布的答案完全相同。@Casimirithippolyte谢谢,我感谢你的诚实,保留否决票也很好。仅供参考,我更改答案的原因是为了回应OP的评论“我认为1.不应该被允许。”这不是因为tenub的答案。不管怎样,干杯。@Matt:我知道这不是你以前的答案,但请注意我的答案没有改变。不要忘记,您可能处于tenub的情况。这对.1不起作用,因为parseFloat('.1')返回0.1。这对.1不起作用,因为parseFloat('.1')返回0.1。@Matt您是对的。所以它应该是
/^-?[0-9]*(?:\.[0-9]+)?$/
@Matt你是对的。所以应该是
/^-?[0-9]*(?:\.[0-9]+)?$/
我不认为
1.
应该被允许。酷,我的模式不允许。我不认为
1.
应该被允许。酷,我的模式不允许它。@Beterraba unrelated你介意在gist/fiddle/plunk中分享你的指令吗?@Beterraba unrelated你介意在gist/fiddle/plunk中分享你的指令吗?tenub先得到它,这看起来最好tenub先得到它,这看起来最好