Регулирующее регулярное выражение

1

У меня есть функция, которую я беру в базовом формате и меняю ее на регулярное выражение. Если я перехожу в ###, он превращает его в регулярное выражение \d\d\d

Мне нужно настроить его, чтобы он позволял использовать альфа-символы.

Если я 44D55 в ##?## он должен разрешить только 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');
}
  • 1
    1. .replace(/[^#?-]/g, '') //remove other chars и 2. .replace(/\?/g, '[a-zA-Z]') //convert ? to alpha
  • 0
    Что делать, если в середине есть буквы, которые должны остаться прежними? как ### BB ### ?? или функция должна работать только с BB, но если мне нужна функция для работы с ## AA ##, если в середине должен быть AA?
Показать ещё 1 комментарий
Теги:

3 ответа

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('--------------------------');
});
0

Итак, вы хотите:

  • # to be \d
  • ? быть A-Z
  • - остаться -
  • Письмо, чтобы оставить это письмо.

Вам нужно будет удалить все, что отсутствует в списке: .replace(/[^#?A-Z-]/g, '').

Затем замените ? с [A-Z]: .replace(/\?/g, '[A-Z]') но имейте в виду, что вам сначала нужно избежать каррета, или только что созданный класс 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 );
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню