Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Php 使用正则表达式验证密码_Php_Regex - Fatal编程技术网

Php 使用正则表达式验证密码

Php 使用正则表达式验证密码,php,regex,Php,Regex,我正在处理的任务需要使用以下规则验证密码: 必须以大写字母(a-Z)开头 有八个字符(最少) 其中一个字符必须是!^或& 密码必须以数字结尾 这是我到目前为止使用的正则表达式: '/^\p{Lu}(?=.*[!^&])\d$.{8,}$/'; // Start with a capital letter: ^\p{Lu} // At least 8 characters: .{8,} // One of these characters must be a: (?=.*[!^&

我正在处理的任务需要使用以下规则验证密码:

  • 必须以大写字母(a-Z)开头
  • 有八个字符(最少)
  • 其中一个字符必须是!^或&
  • 密码必须以数字结尾
这是我到目前为止使用的正则表达式:

'/^\p{Lu}(?=.*[!^&])\d$.{8,}$/';
// Start with a capital letter: ^\p{Lu}
// At least 8 characters: .{8,}
// One of these characters must be a: (?=.*[!^&])
// Must end with a number: \d$

八个字符和一个数字的表达式有效,但特殊字符和大写字母不起作用,因此我向专家寻求帮助,他们可以将我推向正确的方向。

该模式在开始时已经匹配了一个大写字符,因此应该后跟7个或更多字符,使其至少有8个或更多字符

您还可以在末尾匹配一个数字,然后在它前面匹配6个或更多字符

如果图案至少应包含8个字符,则可以使用:

^\p{Lu}(?=[^!^&]*[!^&]).{6,}\d$
  • ^
    字符串的开头
  • \p{Lu}
    匹配任何大写字母
  • (?=[^!^&]*[!^&])
    正向前瞻,断言其中一个
    ^
    &
  • {6,}
    匹配任意字符6次或更多次
  • \d$
    匹配字符串末尾的数字


请注意,
匹配任何字符,包括空格。

为什么要使用这样的不合标准的模式。这是“家庭作业”吗?它一定是家庭作业,因为在现实世界中,这些限制相当简单,会降低安全性。