首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >调整正则表达式

调整正则表达式
EN

Stack Overflow用户
提问于 2018-06-08 23:46:39
回答 2查看 46关注 0票数 1

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

我需要调整它以允许字母字符。

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

所以我可以传入函数##?AA##,所以它必须是2个数字,1个字母数字,然后是字母AA,然后是2个数字。

如何调整此函数?

代码语言:javascript
复制
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');
}
EN

回答 2

Stack Overflow用户

发布于 2018-06-08 23:53:39

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

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2018-06-09 23:10:40

如果我没有记错的话,根据问题和评论,您希望用\d?替换#,以匹配字母字符,可能是[a-zA-Z],如果您传递字母,则它们必须保留。

也许你只能用\d代替#,用[a-zA-Z]代替?

代码语言:javascript
复制
function createValidationRegEx(format) {
  format = format
    .replace(/#/g, '\\d')
    .replace(/\?/g, '[a-zA-Z]');
  return new RegExp('^' + format + '$');
}

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50764202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档