javascript - 正则表达式无法匹配 Angular 2 中的加号 ('+' ),但在测试人员中运行良好

标签 javascript regex angular

这是代码:

export const PASSWORD_PATTERN: RegExp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9`~!@#$%^&*()\-_+={[}\]|\\:;"'<,>.?/]{8,}$/;

此变量在其他地方的使用方式如下:

Validators.pattern(PASSWORD_PATTERN);

此代码的目的是通过确保密码包含一个小写字母、一个大写字母和一个数字来验证密码。密码可以包含任意数量的特殊字符,这些字符是可以在标准键盘上找到的字符(例如 ~ * ( } ; + )。到目前为止,正则表达式将匹配包含每个特殊字符的密码,除了加号('+')。我尝试在正则表达式中用'\+'和'\\+'替换'+',但这并没有改变结果。在某一时刻,我摆脱了每一个正则表达式中除加号之外的特殊字符,自行测试它,并在正则表达式中再次使用 '+'、'\+' 和 '\\+' 不会为包含加号的密码产生任何匹配标志。

使用我之前粘贴的正则表达式,该密码被视为匹配:

Password1`~!@#$%^&*()-_=[{]}\|;:'",<.>/?

虽然此密码不被视为匹配:

Password1`~!@#$%^&*()-_=[{]}\|;:'",<.>/?+

这两个密码之间的唯一区别是末尾的单个加号,并且无论正则表达式包含 +、\+ 还是\\+,第二个密码都不匹配。

正则表达式完全在后端工作,尽管它已针对主要在后端使用的语言进行了修改。

最佳答案

不是最漂亮的东西,但这似乎有效(或者至少朝着正确的方向前进):

let characters = /((.*[A-Z])((.*[a-z].*\d)|(.*\d.*[a-z])).*)|((.*[a-z])((.*[A-Z].*\d)|(.*\d.*[A-Z])).*)|((.*\d)((.*[a-z].*[A-Z])|(.*[A-Z].*[a-z])).*)/;
let length = /.{8,}/;

let good1 = 'abc+Def8';
let good2 = '8b2cDde+';
let bad1 = 'abc+def8';
let bad2 = 'Ab+cde';
let bad3 = 'ab+cD2'

console.log(characters.test(good1) && length.test(good1), characters.test(good2) && length.test(good2), characters.test(bad1) && length.test(bad1), characters.test(bad2) && length.test(bad2), characters.test(bad3) && length.test(bad3));

关于javascript - 正则表达式无法匹配 Angular 2 中的加号 ('+' ),但在测试人员中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44555605/

相关文章:

javascript - 允许字母数字和连字符的正则表达式测试不断返回 false

angular - 需要阻止右键单击 PDF Angular 2

javascript - 在 Angular 5 项目中包含 jquery-ui

Angular 元素与 Angular 库?

C# 正则表达式 : Getting URL and text from multiple "a href"-tags

sql - PostgreSQL 替换 unicode 字符范围

javascript - 如何在 dbdirector 电子商务平台中更改我的在线商店模板

javascript - Node.js中的工作流引擎

javascript - 使用 Typescript 将 Thunk 发送到商店

java - 禁用 JavaScript 的用户可以访问 GWT 吗?