如何只使用正则表达式、而不使用代码的情况下实现以下目标:
1 字符串由点号和数字组成
2 点号必须出现一次且只能出现一次、位置不限
3 数字最多出现9次、位置不限
如何只使用正则表达式、而不使用代码的情况下实现以下目标:
1 字符串由点号和数字组成
2 点号必须出现一次且只能出现一次、位置不限
3 数字最多出现9次、位置不限
直接来
let reg = /(?!^\d*\..*\.)(?!^\d*$)(^[\d|\.]{0,10})$/;
let test = [
'.234567890',
'123456780.',
'1.34567890',
'1.3456789',
'1234567890',
'1..4567890',
'1.3.567890',
'1.3456789a',
'1.345678901',
'1e+48'
];
test.forEach(v => console.log(v, reg.test(v)));
// console.log('---- isNaN 是否是数字')
// test.forEach(v => console.log(v, !isNaN(v)));
你的这个数字跟点组合。不就是 小数吗。
去验证最多是九位数字的小数是吗.
function test (str) {
var flag = true,
reg = /^(\d+)(\.)(\d+)/;
if(!reg.test(str)) {
return false
}
str.replace(reg, function (a, b, c, d) {
if(b.length + d.length >9) {
flag = false
}
})
return flag
}
。。。。 想了半天想了个很low的fun 就是比较麻烦的去判断一个小数的数字项最多有九位,开头还得有数字才行。 当然这只是判断字符串的一部分。严格要加上 ^ $
下面这样子做的正则是不是楼上想要的
var s = 1.123456789;
var x = 9 - s.toString().split(".")[0].length;
var reg = new RegExp("^(\d{0,})(\.\d{1,"+x+"})$");
console.log(reg.test(s));
这样~
简化~