当前位置: 首页 > 知识库问答 >
问题:

正则表达式允许至少一个特殊字符,一个大写字母,一个小写字母(按任何顺序)

潘涵煦
2023-03-14

谁能帮我用一个正则表达式来允许至少一个特殊字符,一个大写字母,一个小写字母。

这是我到目前为止所拥有的:

 ^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$

但它似乎只按“特殊字符”、“大写”、“小写”的顺序匹配字符。

非常感谢您的帮助

共有3个答案

年光明
2023-03-14

它可以通过3个正则表达式快速完成。

function check($string){
   return    preg_match("/[`!%$&^*()]+/", $string) 
          && preg_match("/[a-z]+/", $string) 
          && preg_match("/[A-Z]+/", $string) ;
}

别忘了调整特殊字符列表。因为我不知道你认为哪些角色很特别。

我相信当你不是专家时,在单行正则表达式上浪费大量时间不会提高你的生产力。这个3正则表达式解决方案会很好。它节省了时间。

锺宜
2023-03-14

这是一个可以使用的函数。

function checkRegex(string) {
    var checkSpecial = /[*@!#%&()^~{}]+/.test(string),
        checkUpper = /[A-Z]+/.test(string),
        checkLower = /[a-z]+/.test(string),
        r = false;

        if (checkUpper && checkLower && checkSpecial) {
            r = true;
        }

        return r;

        }

然后检查它是真是假。

var thisVal = document.getElementById('password').value;
var regex = checkRegex(thisVal);

如果var正则表达式为true,则满足条件。

杜元明
2023-03-14

你的正则表达式

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$

实际上应该可以正常工作,但是您可以通过删除第一个来使其变得更好。*

^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$

将匹配至少8个字符的任何字符串,该字符串至少包含一个小写和一个大写ASCII字符以及集合@#$%^中的至少一个字符

 类似资料: