PHP正则表达式模式混乱

PHP正则表达式模式混乱,php,regex,Php,Regex,我不能让几个正则表达式模式正常工作,所以我在谷歌上搜索了其中的大部分,在这个过程中遇到了一些问题。在构建正则表达式模式时,我基本上理解游戏规则,但不理解如何创建正则表达式来检查输入字符串是否至少为1个特定类型的字符。这是我在网上找到的: '/^((?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[@#$%])。{6,20}$/' 我不能理解的是: 这是什么意思?=.*它是指一起的东西还是单独的属性 为什么在花括号和普通括号之间有)。{据我所知,它的任何字符,除非它是指前面提到的任

我不能让几个正则表达式模式正常工作,所以我在谷歌上搜索了其中的大部分,在这个过程中遇到了一些问题。在构建正则表达式模式时,我基本上理解游戏规则,但不理解如何创建正则表达式来检查输入字符串是否至少为1个特定类型的字符。这是我在网上找到的:

'/^((?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[@#$%])。{6,20}$/'

我不能理解的是:

  • 这是什么意思?=.*它是指一起的东西还是单独的属性
  • 为什么在花括号和普通括号之间有
    )。{据我所知,它的任何字符,除非它是指前面提到的任何字符,但是什么使它这样工作的呢
  • 最后一个问题是,regex的工作方式实际上是检查是否提供了所需的字符,但也允许键入类似
    ąó
    “(^!
    )的内容。当我看到这一点时,我看不到任何地方允许使用提到的字符
正如你已经弄明白的那样,我正在尝试构建密码验证正则表达式,并且正在努力解决这个问题

编辑

如果可能的话,有人可以对这个正则表达式进行修改,这样就不意味着

  • 需要提供列表的数字、小写、大写、特殊字符中的一个来填充空格
因此,这意味着

  • 需要所提供列表的数字、小写、大写、特殊字符中的一个,并用所述规则的字符填充空格,这样您可以继续键入所提供列表中的数字、字母和特殊字符,但不能键入一些特殊的东西,如
    !óż
(?=…)
是一个。它断言封闭的正则表达式可以在当前位置匹配,而不实际执行匹配。因此,例如,
(?=.*\d)
的意思是“检查是否可以匹配任意数量的字符,后跟一个数字“转换为”检查字符串前面是否至少有一位数字”

分解正则表达式,这意味着:

^             # Start of string
(             # Match and capture in group 1:
 (?=.*\d)     # Assert that there is at least one digit in the string
 (?=.*[a-z])  # Assert that there is at least one lowercase letter in the string
 (?=.*[A-Z])  # Assert that there is at least one uppercase letter in the string
 (?=.*[@#$%]) # Assert that there is at least one of the characters @#$%
 .{6,20}      # Match 6-20 characters (any character except newlines)
)             # End of group
$             # End of string
顺便说一句,捕获组是完全没有必要的

/^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})$/
^
在字符串开头断言位置

第一捕获组
((?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[@#$%])。{6,20}

(?=.*\d)
正向前瞻-断言下面的正则表达式可以匹配

任何数量的字符,后跟一个数字。换句话说,字符串必须包含一个数字

(?=.[a-z])
正向前瞻-断言下面的正则表达式可以匹配

任意数量的任意字符,后跟a和z之间的单个字符(区分大小写)。换句话说,字符串必须包含小写字符

(?=.[A-Z])
正向前瞻-断言下面的正则表达式可以匹配

任意数量的任意字符,后跟a和Z之间的单个字符(区分大小写)。换句话说,字符串必须包含大写字符

(?=.[@#$%])
正向前瞻-断言下面的正则表达式可以匹配

任意数量的任何字符,在列表中后跟一个字符@#$%,字面意思。换句话说,字符串必须包含@#$%

{6,20}
匹配6到20次之间的任何字符(换行符除外)

$
在字符串末尾断言位置


引用人:


编辑:
更改为
[^\uu黑名单\u字符\uuuuuuuuu此处\uuuuuu]

你是新来的正则表达式还是正则表达式太混乱而无法理解?教程的作者说,这个正则表达式不允许使用像
*!ó
这样的字符,但我可以使用它们,所以我问问题出在哪里,我昨天开始研究正则表达式,所以我可能不知道所有事情,只是教程显然是错的。避免如果你想学习正则表达式,请使用它。然后你能告诉我如何改变正则表达式,使其表示1个或多个提到的字符,因为这是
(\d+)
或这是
(\d){1,}
在alli不起作用,我这么做了,我想我只需要把这个点替换成其他的东西,但不知道我应该把它和剩余的正则表达式放在哪里?
{6,20}
“点“在本部分中,不能指任何字符,因为您希望密码包含特定提到的字符,否则创建密码集有什么意义?”conditions@user2668182当前位置我正在解释正则表达式在做什么。如果你想让它表现得不同,你必须更明确(描述允许或禁止哪些字符,而不是使用点匹配任何字符)但是为什么有人会限制密码的合法字符?那只会使它们变得不必要的不安全。我可以从一开始就这样做,但我不想在这里输入整个utf-8库,我宁愿说可以使用什么,而不是什么cant@user2668182“我不想在这里输入整个utf-8库”那么你想做什么?这是自以为是的。使用这里的列表是最佳解决方案。如果你需要复习,有
\w
\w
和ASCII字符组。