调整正则表达式

时间:2018-06-08 15:46:39

标签: javascript regex

我有一个基本格式的函数,并将其更改为正则表达式。 如果我传入###,则会转换为\d\d\d

的正则表达式

我需要调整它,知道允许使用alpha字符。

如果我传入##?##,则应该只允许44D55。如果我传入真实的字母,那就必须是那些字母

所以我可以传递函数##?AA##,所以它必须是2个数字,1个字母数字,然后是字母AA,然后是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');
}

3 个答案:

答案 0 :(得分:0)

您需要先?允许replace,然后将所有?替换为[a-zA-Z],以使其与字母字符匹配。



function createValidationRegEx(format){
  format = format
    .replace(/[^#?-]/g, '') //remove other chars
    .replace(/#/g, '\\d')   //convert # to \d
    .replace(/\-/g, '\\-') //convert - to \-
    .replace(/\?/g, '[a-zA-Z]')   //convert ? to alpha
  return new RegExp('^' + format + '$');
}

let re = createValidationRegEx('##?##');
console.log( re );
//=> /^\d\d[a-zA-Z]\d\d$/

console.log( re.test('44D55') );
//=> true




答案 1 :(得分:0)

所以你想要:

  • #\d
  • ?A-Z
  • -留下-
  • 留下那封信的信。

您必须删除列表中没有的所有内容:.replace(/[^#?A-Z-]/g, '')

然后将?替换为[A-Z].replace(/\?/g, '[A-Z]') 但是请记住,您必须首先逃离carret,否则新创建的char类将是当你想要从A到Z匹配时,注定([A\-Z]不是一个好主意)

然后你就完成了:

function createValidationRegEx(format){
  format = format
    .replace(/[^#?A-Z-]/g, '') //remove other chars
    .replace(/#/g, '\\d')      //convert # to \d
    .replace(/-/g, '\\-')      //escape - to \-
    .replace(/\?/g, '[A-Z]')   //convert ? to any letter
    ;
  return new RegExp('^' + format + '$', 'g');
}

let re = createValidationRegEx('##?AA##');
console.log( re );
re = createValidationRegEx('##?BB##');
console.log( re );

答案 2 :(得分:0)

如果我没有记错,根据问题和评论,您要将#替换为\d?以匹配字母字符,可能是[a-zA-Z],如果您通过他们必须留下信件。

也许您只能将#替换为\d而将?替换为[a-zA-Z]

function createValidationRegEx(format) {
  format = format
    .replace(/#/g, '\\d')
    .replace(/\?/g, '[a-zA-Z]');
  return new RegExp('^' + format + '$');
}

let items = [
  ["##?##", "44D55"],
  ["##?AA##", "44DAA55"],
  ["###BB###??", "111BB111AA"],
  ["##", "12"],
  ["?", "Z"],
  ["", "Test"],
  ["###BB###??", "111AA111AA"],
  ["##?AA##", "449AA55"],
  ["?", "&"]
];

function createValidationRegEx(format) {
  format = format
    .replace(/#/g, '\\d')
    .replace(/\?/g, '[a-zA-Z]');
  return new RegExp('^' + format + '$');
}

items.forEach((item) => {
  let r = createValidationRegEx(item[0]);
  console.log(r);
  console.log("match " + item[1] + " ==> " + r.test(item[1]));
  console.log('--------------------------');
});