Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式无法匹配Angular 2中的加号(';+;';),但它在测试程序中工作正常_Javascript_Regex_Angular - Fatal编程技术网

Javascript 正则表达式无法匹配Angular 2中的加号(';+;';),但它在测试程序中工作正常

Javascript 正则表达式无法匹配Angular 2中的加号(';+;';),但它在测试程序中工作正常,javascript,regex,angular,Javascript,Regex,Angular,代码如下: export const PASSWORD_PATTERN: RegExp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9`~!@#$%^&*()\-_+={[}\]|\\:;"'<,>.?/]{8,}$/; 此代码的目的是通过确保密码包含一个小写字母、一个大写字母和一个数字来验证密码。密码可以包含任意数量的特殊字符,这些字符可以在标准键盘上找到(例如~*(};+)。到目前为止,正则表达式将匹配包含除加号(“+”)

代码如下:

export const PASSWORD_PATTERN: RegExp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9`~!@#$%^&*()\-_+={[}\]|\\:;"'<,>.?/]{8,}$/;
此代码的目的是通过确保密码包含一个小写字母、一个大写字母和一个数字来验证密码。密码可以包含任意数量的特殊字符,这些字符可以在标准键盘上找到(例如~*(};+)。到目前为止,正则表达式将匹配包含除加号(“+”)以外的每个特殊字符的密码。我曾尝试在正则表达式中用“\+”和“\\+”替换“+”,但结果没有改变。有一次,我去掉了正则表达式中除加号以外的所有特殊字符,以自行测试它,并且再次在正则表达式中使用“+”、“\+”和“\\+”不会为包含加号的密码生成任何匹配项

使用我先前粘贴的regexp,此密码被视为匹配:

Password1`~!@#$%^&*()-_=[{]}\|;:'",<.>/?
Password1`~!@#$%^&*()-_=[{]}\|;:'",<.>/?+
Password1`~!@$%^&*()-\\\ \:',/?
虽然此密码不被视为匹配密码:

Password1`~!@#$%^&*()-_=[{]}\|;:'",<.>/?
Password1`~!@#$%^&*()-_=[{]}\|;:'",<.>/?+
Password1`~!@$%^&*()-\\\ \:',/+
这两个密码之间的唯一区别是结尾处有一个加号,第二个密码与正则表达式是否包含+、\+或\\+都不匹配


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

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

let characters=/(.[A-Z])(.[A-Z].[A-Z])(.[A-Z].[A-Z])(.[A-Z].[A-Z].[A-Z])(.[A-Z].[A-Z])(.[A-Z].[A-Z].[A-Z])(.[A-Z].];
设长度=/。{8,}/;
设good1='abc+Def8';
设good2='8b2cDde+';
设bad1='abc+def8';
设bad2='Ab+cde';
设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(bad3)和length.test(bad3));
不是最漂亮的东西,但这似乎有效(或至少方向正确):

let characters=/(.[A-Z])(.[A-Z].[A-Z])(.[A-Z].[A-Z])(.[A-Z].[A-Z].[A-Z])(.[A-Z].[A-Z])(.[A-Z].[A-Z].[A-Z])(.[A-Z].];
设长度=/。{8,}/;
设good1='abc+Def8';
设good2='8b2cDde+';
设bad1='abc+def8';
设bad2='Ab+cde';
设bad3='ab+cD2'
控制台日志(字符测试(good1)和长度测试(good1)、字符测试(good2)和长度测试(good2)、字符测试(bad1)和长度测试(bad1)、字符测试(bad2)和长度测试(bad2)、字符测试(bad3)和长度测试(bad3))
使用测试,底部的JS代码看起来正常工作。您如何测试以确保密码有效

在新的正则表达式中,我将所有符号更改为
[\S]
。这将匹配所有非空白字符。您想将密码限制为仅在键盘上使用的特殊字符,还是所有可能的字符?如果是,您应该使用
[\S]
。事实上,没有真正的理由不允许密码中包含所有字符(除了结束行)。在这种情况下,应将
[\S]
替换为

如何处理密码值?是否以明文形式将其传递到后端?处理密码的一个好方法可能是检查密码是否与前端的正则表达式匹配,使用sha-256对密码进行散列(如果您想做得更好,则使用唯一的用户字符串对其进行加密),然后将密码传递回服务器。服务器将再次对密码进行加密和散列,然后将其存储在表中,以便与用户下次登录时进行比较

这有助于为用户添加额外的安全层。假设您在用户和服务器之间使用ssl连接,则实际上不需要(始终使用ssl)但是当涉及到用户密码时,在安全方面总是很好。如果用户在中间攻击中获得成功,这不会阻止用户登录,因为当密码用户侧散列时,它就变成了被发送到服务器并被验证的验证。Howe无论如何,这避免了你知道用户的实际密码,因此如果有人截获了散列(或者说服务器泄露了一些服务器端前的散列数据。看着你,真让人心碎!),有人就不能轻易地去其他网站试试用户的用户名/密码组合

const regEx=/^(?=.[a-z])(?=.[a-z])(?=.[0-9])[\S]{8,}$/;
常数good1='A12345678a+'
const good2='Aaascfsfas1@$@+$%'
const example1='Password1`~!@$%^&*()-\:“,/?”
const example2='Password1`~!@$%^&*()-\ \:“,/?+”
常数bad1='a'
常数bad2=aasdfasfdsfads@+#$%$#@'
console.log(
正则表达式测试(good1),正则表达式测试(good2),
正则表达式测试(示例1),正则表达式测试(示例2),
正则表达式测试(bad1),正则表达式测试(bad2)
)
使用测试,底部的JS代码看起来正常工作。您如何测试以确保密码有效

在新的正则表达式中,我将所有符号更改为
[\S]
。这将匹配所有非空白字符。您想将密码限制为仅在键盘上使用的特殊字符,还是所有可能的字符?如果是,您应该使用
[\S]
。事实上,没有真正的理由不允许密码中包含所有字符(除了结束行)。在这种情况下,应将
[\S]
替换为

如何处理密码值?是否以明文形式将其传递到后端?处理密码的一个好方法可能是检查密码是否与前端的正则表达式匹配,使用sha-256对密码进行散列(如果您想进行加密,请使用唯一的用户字符串对其进行加密)