jQuery 验证器正则表达式使用数组或变量
jquery validator regex using array or variable
我正在使用带有正则表达式的 jquery 验证器插件来测试仅接受数字和小数的匹配输入字段,例如:1.0 到 1.984375(1/64 增量),它可以工作,但正则表达式很长,我需要多次重复使用它,但对小数点前的数字进行了一些细微的更改。
我想知道是否有办法将数组用于正则表达式的小数部分,如下所示......
var decimals = ('.015625|'.03125|'.046875...)?$
或
var decimals = ('.015625, '.03125, '.046875...)
然后在验证器中有类似的东西...
regex=/^4+decimal+/
这样的事情可能吗?
编辑:我用分数.js在plalx代码中添加了分数,可以在这里找到...http://hypervolu.me/~erik/fraction.js/。
var fractionsAll=range(1/64, 63/64, 1/64).map(convertToFraction).join('|');
function convertToFraction(num){
return new Fraction(num)
};
示例:1-10
regexp: new RegExp('^([1-9]|10$)(''.('+decimalsAll+')|''s('+fractionsAll+'))?$')
这样的事情呢?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+'./, '');
}
请注意,您应该能够使用取模运算符来知道一个数字是否可以被 1/64 除以。
function isOne64Increment(num) { return !(num % (1/64)); }
range(.015625, 0.984375, 1/64).every(isOne64Increment); //true
您可以使用 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>
你可以
使用正则表达式构造函数,比如
//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 + ')$');
您可以使用
new RegExp
从字符串构造正则表达式,并使用join
从数组构造字符串。
var decimals = ['.015625', '.03125', '.046875', ...];
var regex = new RegExp('^4(' + decimals.join('|').replace(/'./g, '''.') + ')$');
decimals
的元素必须是字符串。如果它们是数字,那么将它们转换为字符串将添加一个前导0
如果数字是分数,这将弄乱正则表达式。如果您不想这样做,可以使用 Array.prototype.map
对每个数字调用一个函数,该函数将其转换为字符串并删除前导零。
相关文章:
- Javascript:OnChange事件,将数组变量传递给另一个函数
- 在将csv文件中的数据分配给数组变量时增强了d3代码
- 是socket.io异步的-我需要锁定全局数组/变量吗
- 在Javascript代码中显示PHP数组变量
- 如何在不赋值数组变量的情况下读取数组数据
- 局部数组变量不是数组
- Javascript数组变量的行为不相同
- 正在尝试将Javascript数组变量分配给HTML输入值属性
- JQuery的PHP查询数组变量
- Javascript::如何将关联数组的键获取到数组变量
- 在jsp页面中获取javascript数组变量
- 输出数组变量javascript
- 如何将数组变量从Python插入到Javascript
- 将数组变量传递给函数的下一部分
- 使用 AJAX 调用将数组变量从 JS 传递到 PHP
- d3 本地存储比较数组 .filter 咖啡脚本;数组变量不起作用
- 我们可以更新一个javascript数组变量,而不使用ajax重新加载页面吗?
- 无法使用 JavaScript 将值读入全局数组变量
- 作为“名称”的Javascript数组变量不起作用
- 如何将数组变量合并为对象数组变量