Javascript 使用数组或变量的jquery验证程序正则表达式
我正在使用jquery validator插件和正则表达式来测试只接受1.0到1.984375(1/64增量)之间的数字和小数的匹配输入字段,它可以工作,但正则表达式很长,我需要重复使用多次,但小数点之前的数字有一些细微的变化 我想知道是否有一种方法可以使用数组来表示正则表达式的小数部分,类似这样的Javascript 使用数组或变量的jquery验证程序正则表达式,javascript,jquery,regex,validation,Javascript,Jquery,Regex,Validation,我正在使用jquery validator插件和正则表达式来测试只接受1.0到1.984375(1/64增量)之间的数字和小数的匹配输入字段,它可以工作,但正则表达式很长,我需要重复使用多次,但小数点之前的数字有一些细微的变化 我想知道是否有一种方法可以使用数组来表示正则表达式的小数部分,类似这样的 var decimals = (\.015625|\.03125|\.046875...)?$ 或 然后在验证器中有一些类似于 regex=/^4+decimal+/ 这样可能吗 编辑:我用fr
var decimals = (\.015625|\.03125|\.046875...)?$
或
然后在验证器中有一些类似于
regex=/^4+decimal+/
这样可能吗
编辑:我用fraction.js将分数添加到plalx代码中,可以在这里找到
示例:1-10
regexp: new RegExp('^([1-9]|10$)(\\.('+decimalsAll+')|\\s('+fractionsAll+'))?$')
您可以使用jQuery.inArray()
或者像那样工作
<script>
var LOW_VALUE = 0.00001;
function check(number) {
if (number < 1 || number > 1.99) return false
return (Math.abs(number % (1/64)) < LOW_VALUE);
}
console.log(check(0.15625));
console.log(check(1.984375));
console.log(check(0.6));
</script>
var低_值=0.00001;
功能检查(编号){
如果(数字<1 | |数字>1.99)返回false
返回值(数学绝对值(数字%(1/64))<低值);
}
控制台日志(检查(0.15625));
控制台日志(检查(1.984375));
控制台日志(检查(0.6));
您可以使用jQuery.inArray()
或者像那样工作
<script>
var LOW_VALUE = 0.00001;
function check(number) {
if (number < 1 || number > 1.99) return false
return (Math.abs(number % (1/64)) < LOW_VALUE);
}
console.log(check(0.15625));
console.log(check(1.984375));
console.log(check(0.6));
</script>
var低_值=0.00001;
功能检查(编号){
如果(数字<1 | |数字>1.99)返回false
返回值(数学绝对值(数字%(1/64))<低值);
}
控制台日志(检查(0.15625));
控制台日志(检查(1.984375));
控制台日志(检查(0.6));
您可以像
//need to store the values as strings not as numerical values because otherwise the `0` prefix will come when it is converted to a string, also need to escape the `.` with 2 `\\`
var decimals = ['\\.015625', '\\.03125', '\\.046875'].join('|');
var regex= new RegExp('^4(' + decimals + ')$');
您可以像这样使用构造函数
//need to store the values as strings not as numerical values because otherwise the `0` prefix will come when it is converted to a string, also need to escape the `.` with 2 `\\`
var decimals = ['\\.015625', '\\.03125', '\\.046875'].join('|');
var regex= new RegExp('^4(' + decimals + ')$');
您可以使用
newregexp
从字符串构造RegExp,并使用join
从数组构造字符串
var decimals = ['.015625', '.03125', '.046875', ...];
var regex = new RegExp('^4(' + decimals.join('|').replace(/\./g, '\\.') + ')$');
小数的元素必须是字符串。如果它们是数字,那么将它们转换为字符串将添加一个前导的0
,如果数字是一个分数,这将弄乱regexp。如果您不想这样做,可以使用Array.prototype.map
对每个数字调用一个函数,将其转换为字符串并删除前导零。您可以使用new RegExp
从字符串构造RegExp,并使用join
从数组构造字符串
var decimals = ['.015625', '.03125', '.046875', ...];
var regex = new RegExp('^4(' + decimals.join('|').replace(/\./g, '\\.') + ')$');
小数的元素必须是字符串。如果它们是数字,那么将它们转换为字符串将添加一个前导的0
,如果数字是一个分数,这将弄乱regexp。如果您不想这样做,您可以使用Array.prototype.map对每个数字调用一个函数,将其转换为字符串并删除前导零。类似的事情怎么样?RegExp
构造函数允许从字符串构造动态正则表达式
var decimals = range(.015625, 0.984375, 1/64).map(removeDotAndBefore).join('|');
var regex = new RegExp('^4(\\.(' + decimals + '))?$');
function range(from, to, increment) {
var values = [];
for (; from <= to; from += increment) values.push(from);
return values;
}
function removeDotAndBefore(num) {
return num.toString().replace(/^\d+\./, '');
}
像这样的怎么样?RegExp
构造函数允许从字符串构造动态正则表达式
var decimals = range(.015625, 0.984375, 1/64).map(removeDotAndBefore).join('|');
var regex = new RegExp('^4(\\.(' + decimals + '))?$');
function range(from, to, increment) {
var values = [];
for (; from <= to; from += increment) values.push(from);
return values;
}
function removeDotAndBefore(num) {
return num.toString().replace(/^\d+\./, '');
}
查看动态表达式的RegExp
构造函数。但是,正则表达式有更好的解决方案来处理这个数学问题。虽然不确定这是否可行,但您可以使用inaray()函数关于函数isOne64Increment(num){return!(num%(1/64));}
?看看动态表达式的RegExp
构造函数。但是,正则表达式有更好的解决方案来处理这个数学问题。虽然不确定这是否可行,但您可以使用inaray()函数函数isOne64Increment(num){return!(num%(1/64));}
?