我在一个字段中持有我需要的验证格式。 我需要将不同的##转换为正则表达式验证。
是否有一个简单的替换可以为我这样做。 例如,我需要验证帐号。 有时可能需要### - ###,或者我会得到#######或## - ####。 取决于id =“validationrule”字段中的内容 我正在寻找
regex = $('#validationrule').replace("#", "[0/9]");
还必须考虑到有时会出现冲刺。
答案 0 :(得分:1)
您的问题似乎是关于从字符串变量创建正则表达式(您可以从指定验证格式的输入字段获取)。
"###-###"
可能会变成/^\d{3}\-\d{3}$/
"#######"
可能会变成/^\d{7}$/
如果验证格式是使用2个字符#
和-
构建的,则可以使用:
function createValidationRegEx(format){
format = format
.replace(/[^#\-]/g, '') //remove other chars
.replace(/#/g, '\\d') //convert # to \d
.replace(/\-/g, '\\-'); //convert - to \-
return new RegExp('^' + format + '$', 'g');
}
//create regexes
var format1 = createValidationRegEx('###-###');
var format2 = createValidationRegEx('#######');
//test regexes
console.log(format1.test('123-456')); // true
console.log(format2.test('123-456')); // false
console.log(format1.test('1234567')); // false
console.log(format2.test('1234567')); // true
请注意,在从字符串创建正则表达式时,需要注意哪些字符需要转义。 This answer提供了有关如何更广泛地解决此问题的更多详细信息,如果您想构建更复杂的解决方案。
答案 1 :(得分:0)
如果您要替换.value
元素的<input>
,可以使用.val(function)
return
替换来自.replace()
function
内的字符.val()
}},链regex
将结果分配给RegExp
。使用带有g
标记的RegExp
构造函数替换提供给.replace()
的{{1}}的所有匹配项,以匹配字符串处的字符。
var regex = $("#validationrule").val(function(_, val) {
return val.replace("#", "[0/9]");
}).val();
console.log(regex);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<input id="validationrule" value="#">