У меня есть функция, которую я беру в базовом формате и меняю ее на регулярное выражение. Если я перехожу в ###
, он превращает его в регулярное выражение \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');
}
Если я не ошибаюсь, в соответствии с вопросом и комментариями, которые вы хотите заменить #
на \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('--------------------------');
});
Итак, вы хотите:
#
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 );
Вам нужно разрешить ?
сначала 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
.replace(/[^#?-]/g, '') //remove other chars
и 2..replace(/\?/g, '[a-zA-Z]') //convert ? to alpha