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