JavaScript用于有效的正数和负数,带有一个点或没有点
我使用a只允许用户输入数字、小数和减号,但是我想更新它,使其在开始时只允许一个点和一个负号。下面是我现在拥有的,但它允许无效输入,如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, ''); 我有一个类似的指令,
--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先得到它,这看起来最好