JavaScript正则表达式用于特殊字符

67

我正在尝试为密码字段创建验证,只允许使用a-zA-Z0-9字符和.!@#$%^&*()_+-=

我似乎掌握不了这个技巧。

当使用regex = /a-zA-Z0-9/g 和 regex = /[a-zA-Z0-9]/时有什么区别?哪些.!@#$%^&*()_+-=字符需要转义?

到目前为止,我尝试过的方法是:

var regex = /a-zA-Z0-9!@#\$%\^\&*\)\(+=._-/g

但是没有成功


34
停止。密码中使用的字符不应有任何限制。最多只能规定必须包含哪些类型的字符,但如果我想使用像 ag90:"jNn;fsi./ 这样的密码,为什么不能允许呢? - cHao
5
@cHao也许可以提供一个用于执行此操作的正则表达式... ;) - jamiebarrow
2
@jamiebarrow:/^(.*\W){3}.*$/需要至少3个非单词字符...但这并不能回答问题。 :) - cHao
15个回答

75
var regex = /^[a-zA-Z0-9!@#\$%\^\&*\)\(+=._-]+$/g

应该有效

另外可能希望有最小长度,例如6个字符

var regex = /^[a-zA-Z0-9!@#\$%\^\&*\)\(+=._-]{6,}$/g

这难道不是禁止括号内的每个字符吗?(包括我们所热爱的字母表?) - 11684
哦,抱歉,我在正则表达式中混淆了元字符。请忽略我之前的评论。 - 11684
2
逗号不是特殊字符吗?var regex = /^[a-zA-Z0-9!@#\$%\^\&*\)\(+=._-]+$/g; regex.test('happy,'); 返回 false。参考链接https://tools.oratory.com/altcodes.html。 - shareef

48

一种更简洁的匹配特殊字符的方法:

/\W|_/g

\W匹配任何非单词字符(字母数字和下划线)。

下划线被认为是一个特殊字符,因此要添加布尔值来匹配特殊字符或_。


10
请注意:这将匹配任何非拉丁字符。 - user6898463
4
在这种情况下,像 ñ 这样的字符也被视为特殊字符,因此请小心处理。 - Christiaan Maks
我喜欢这个。 - Paulquappe

14

您可以通过测试不合法字符来进行具体化。这会对任何非字母数字和空格的字符返回true:

var specials = /[^A-Za-z 0-9]/g;
return specials.test(input.val());

1
simply and perfect - Aravin

13

有什么区别?

/[a-zA-Z0-9]/ 是一个字符类,匹配该类中的一个字符。它由三个范围组成。

/a-zA-Z0-9/ 表示这九个字符的字面序列。

需要转义哪些来自 .!@#$%^&*()_+-= 的字符?

在字符类内,只有减号(如果不在结尾)和脱字符(如果在开头)需要转义。在字符类外,.$^*+() 具有特殊含义,并需要转义以字面匹配。

仅允许使用 a-zA-Z0-9 字符和 .!@#$%^&*()_+-=

将它们放在字符类中,然后让它们repeat并要求匹配整个字符串与它们anchors

var regex = /^[a-zA-Z0-9!@#$%\^&*)(+=._-]*$/

11

特殊字符的完整集合:

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

回答你的问题:
var regular_expression = /^[A-Za-z0-9\!\@\#\$\%\^\&\*\)\(+\=\._-]+$/g

8
这个怎么样:-
var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,}$/;

最少需要 6 个字符,包括数字、字母和特殊字符。


为什么需要最大长度限制? - 11684
@11684 - 可能是因为它最终需要存储在数据库中的固定大小条目中吧? - Ed Heal
我们不知道这个,但如果是这样的话,我会问为什么一开始入口大小如此低。@EdHeal - 11684
@11684- 我想Rahul做了个例子。此外,ATM的PIN码只有4位数字。银行似乎对此感到满意。6个字符的话会更难猜测! - Ed Heal
1
@rahul 缺少各种特殊字符,如[]{}<>/"'。 - Pranay kumar

5

以上写的正则表达式存在一些问题。

这个是完美的。

^[a-zA-Z\d\-_.,\s]+$

此处仅包含允许的特殊字符,并可在逗号后进行扩展。


4

这个正则表达式对于我来说很有效,用于验证密码:

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

这个特殊字符列表(包括空格和标点符号)是从这里获取的:https://www.owasp.org/index.php/Password_special_characters。经过一些修改,因为反斜杠('\')和右方括号(']')需要转义以便正则表达式正确工作。所以添加了两个额外的反斜杠字符。

谢谢你提供这个信息和OWASP特殊字符列表的链接,非常有用! - Moussa

4
// Regex for special symbols

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

3

最少8个字符,其中包含至少一个字母、一个数字和一个特殊字符的正则表达式:

/^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接