我有一个基本格式的函数,并将其更改为正则表达式。
如果我传入###
,则会转换为\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');
}
答案 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('--------------------------');
});