我尝试验证各种输入字符串。因此我尝试使用正则表达式。不幸的是,所有的否定案例都与真实相符。如何确定正则表达式必须匹配整个字符串?
const regex = /(^([0-9]+(.||,)+[0-9]?)$)||(^([0-9]+)$)||(^(.||,)+[0-9]+$)/;
const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]
const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"]
testSetPositiv.forEach(function(value) {
console.log(regex.test(value));
//should always return true
})
console.log("----------------");
testSetNegativ.forEach(function(value) {
console.log(regex.test(value));
//should always return false
})
我也尝试使用parseFloat(...)
,但它接受例如"5.45abc"
:
const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]
const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"]
testSetPositiv.forEach(function(value) {
console.log(parseFloat(value) >= -Number.MAX_VALUE)
//should always return true
})
console.log("----------------");
testSetNegativ.forEach(function(value) {
console.log(parseFloat(value) >= -Number.MAX_VALUE)
//should always return false
})
答案 0 :(得分:1)
一个简单的regex
解决方案:
const regex = /^(\d*[.,]?\d+|\d+[.,]?\d*)$/;
const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]
const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"]
testSetPositiv.forEach(function(value) {
console.log(regex.test(value));
//should always return true
})
console.log("----------------");
testSetNegativ.forEach(function(value) {
console.log(regex.test(value));
//should always return false
})
答案 1 :(得分:0)
parseInt
和parseFloat
也可以返回数字,请检查代码段:
const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"];
testSetNegativ.forEach(function(value) {
console.log(parseFloat(value));
})

我建议您使用:
.replace(',', '.')
用正确的JavaScript小数点分隔符替换逗号(在欧洲用作小数点分隔符),+
可轻松转换为数字。 (如果不是数字,它将返回NaN
const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]
const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"];
testSetPositiv.forEach(function(value) {
console.log(+(value.replace(',', '.')) >= -Number.MAX_VALUE)
//should always return true
})
console.log("----------------");
testSetNegativ.forEach(function(value) {
console.log(+(value.replace(',', '.')) >= -Number.MAX_VALUE)
//should always return false
})

希望它有所帮助。
答案 2 :(得分:0)
答案 3 :(得分:0)
使用isNaN,(旁注“45546,”不应该是数字)
const testsetMixed = [34, 45.45, ".7867", "wegrger", "3443,34erf", "546.", "45546,", "0"]
testsetMixed.forEach(function(value){
if( isNaN(value)) {
console.log('not number');
} else {
console.log('number');
}
})
答案 4 :(得分:0)
如果输入字符串不是数字
,可以使用isNan()
返回true