将##转换为数字正则表达式

时间:2016-12-16 04:51:17

标签: javascript jquery

我在一个字段中持有我需要的验证格式。 我需要将不同的##转换为正则表达式验证。

是否有一个简单的替换可以为我这样做。 例如,我需要验证帐号。 有时可能需要### - ###,或者我会得到#######或## - ####。 取决于id =“validationrule”字段中的内容 我正在寻找

regex = $('#validationrule').replace("#", "[0/9]");

还必须考虑到有时会出现冲刺。

2 个答案:

答案 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="#">