我有一个函数,我接受基本格式,并将其更改为正则表达式。如果传入###
,它会将转换为\d\d\d
的正则表达式
我需要调整它以允许字母字符。
如果我传入##?##
,它应该只允许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');
}
发布于 2018-06-08 23:53:39
您需要在第一个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
发布于 2018-06-09 23:10:40
如果我没有记错的话,根据问题和评论,您希望用\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('--------------------------');
});
https://stackoverflow.com/questions/50764202
复制相似问题