首页 > 解决方案 > ES6:为什么我在匹配我的正则表达式时得到空值?

问题描述

我在变量中有一个正则表达式

我的正则表达式的目的是列出所有允许的用户输入字符

请注意,正则表达式可能会根据用户偏好不时更改

var regex = new RegExp(passParamStateMap.value, "g");

console.log 之后我的正则表达式的值是

/~@#$%^&*()_+{}[]:;<>,.?\//g

但是,当我尝试将其与用户输入匹配时,我得到了null价值

有人可以启发我。

var regex = new RegExp(passParamStateMap.value, "g");

     if( e.target.value.match(regex) ){ //null value
       passError.concat("allowable")
     }

示例用例:

  1. 用户在密码参数维护模块中编辑该字段Allowable Special Characters
  2. 用户将这些定义为允许的:~@#$%^&*()_+{}[]:;<>,.?
  3. 现在,在我的New Password领域,唯一允许的特殊字符是 ff:~@#$%^&*()_+{}[]:;<>,.?
  4. 我可以使用正则表达式来达到这个要求吗?请注意,该值~@#$%^&*()_+{}[]:;<>,.?可能会更改

标签: javascriptregexstringecmascript-6

解决方案


为您的正则表达式中的字符创建一个字符集:

/[~@#$%^&*()_+{}[]:;<>,.?\/]/g

这将匹配任何字符-您可以使其与当前代码一起使用,如下所示:

new RegExp("[" + passParamStateMap.value + "]", "g");

请注意,当您解析时passParamStateMap.value,您可能需要转义特殊字符,例如[and ],因为这]会提前结束字符类。这里有一个函数可以让你做到这一点:

new RegExp("[" + passParamStateMap.value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "]", "g");

推荐阅读