javascript - 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")
}
示例用例:
- 用户在密码参数维护模块中编辑该字段
Allowable Special Characters
- 用户将这些定义为允许的:
~@#$%^&*()_+{}[]:;<>,.?
- 现在,在我的
New Password
领域,唯一允许的特殊字符是 ff:~@#$%^&*()_+{}[]:;<>,.?
- 我可以使用正则表达式来达到这个要求吗?请注意,该值
~@#$%^&*()_+{}[]:;<>,.?
可能会更改
解决方案
为您的正则表达式中的字符创建一个字符集:
/[~@#$%^&*()_+{}[]:;<>,.?\/]/g
这将匹配任何字符-您可以使其与当前代码一起使用,如下所示:
new RegExp("[" + passParamStateMap.value + "]", "g");
请注意,当您解析时passParamStateMap.value
,您可能需要转义特殊字符,例如[
and ]
,因为这]
会提前结束字符类。这里有一个函数可以让你做到这一点:
new RegExp("[" + passParamStateMap.value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "]", "g");
推荐阅读
- ios - 如何最好地将巨大的 .sqlite 数据库移动到旧的低内存 iOS 设备上的新目录?
- javascript - Node.JS 系统资源监控
- linux - 测试和设置(或其他原子 RMW 操作)是任何架构上的特权指令吗?
- java - java regular expression partial replace
- reactjs - 将路由器道具共享给未包装在路由器中的组件
- flutter - Flutter CustomScrollView 长条堆叠
- visual-studio-2017 - 将证书保存在中心位置
- regex - 正则表达式根据子值查找所有 XML 值
- laravel - 带有 laravel 后端的 Lonic 3
- android - E/AndroidRuntime:致命异常:Android 的 AsyncTask #1 错误