我不擅长正则表达式。我需要验证密码是否正确。
条件:
您的密码长度可以是8-32个字符,并且必须包括至少两个以下字符:
正则表达式中的正则表达式允许至少一个特殊字符,一个大写字母,一个小写字母(按任何顺序)需要所有三个,并且对长度没有上限,因此看起来我需要修改Tim Pietzcker的解决方案,这是
<代码>^(? =.{ 8,})(? =.*[a-z])(? =. *[A-Z])(? =. *[@#$%^
将匹配包含至少一个小写和一个大写ASCII字符以及集合中至少一个字符的至少8个字符的任何字符串@#$%^
也
第一种情况:至少一个字母(大写或小写)和至少一个数字
((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9]).{8,32}
第二种情况:至少一个字母(大写或小写)和至少一个特殊字符
((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}
第三种情况:至少一个数字和至少一个特殊字符
(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}
现在,前面的三个案例已合并,模式将变为:
(((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9])).{8,32}|((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}|(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}
说明:
该部分 : ((?=.*[美西])|(?=.*[a-z]))。(?=.*[0-9]))。{8,32}
(? =. *[A-Z])|(? =.*[a-z])
:字母(大写或小写)
(0-9])
: 数量
< code>{8,32} 8到32个字符
该部分 : ((|?=.*[a-z]))(?=.*[@#$%^
(? =. *[A-Z])|(? =.*[a-z])
:字母(大写或小写)
(?=.*[@#$%^
< code>{8,32}
8到32个字符
零件:
(?=.*[0-9])(?=.*[@#$%^
(0-9])
: 数量
(?=.*[@#$%^
< code>{8,32}
8到32个字符
这是测试模式的简单代码:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
// Passwords
String[] passwords = new String[8];
passwords[0] = "ABCabc123"; // letters (uppercase or lowercase) and numbers : VALID
passwords[1] = "*+uu*+aa"; // letters (uppercase or lowercase) and special characters : VALID
passwords[2] = "123+*$0*"; // numbers and special characters : VALID
passwords[3] = "ABCabc123*$#"; // letters (uppercase or lowercase) and numbers and special characters : VALID
passwords[4] = "ABCDabcd"; // letters (uppercase and lowercase) : INVALID
passwords[5] = "abcdefg"; // letters (lowercase) : INVALID
passwords[6] = "ABCDEFGH"; // letters (uppercase) : INVALID
passwords[7] = "123456789"; // numbers : INVALID
// Password validation pattern
var Validation = new Regex(@"((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9]).{8,32}|((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}|(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}");
// Validat the passwords
for (int i = 0; i < passwords.Length; i++){
var isValidated = Validation.IsMatch(passwords[i]);
Console.WriteLine(isValidated);
}
}
}
结果是:
如果您想根据条件单独验证密码,我定义了3种模式,与您想要的条件兼容:
1-相字母和数字
2-相字母和字符
3-具有数字和字符
将验证密码,这对应于上述条件之一:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
// Passwords
String[] passwords = new String[8];
passwords[0] = "ABCabc123"; // letters (uppercase or lowercase) and numbers : VALID
passwords[1] = "*+uu*+aa"; // letters (uppercase or lowercase) and special characters : VALID
passwords[2] = "123+*$0*"; // numbers and special characters : VALID
passwords[3] = "ABCabc123*$#"; // letters (uppercase or lowercase) and numbers and special characters : VALID
passwords[4] = "ABCDabcd"; // letters (uppercase and lowercase) : INVALID
passwords[5] = "abcdefg"; // letters (lowercase) : INVALID
passwords[6] = "ABCDEFGH"; // letters (uppercase) : INVALID
passwords[7] = "123456789"; // numbers : INVALID
// Password validation pattern
var hasLetterAndNumber = new Regex(@"((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9]).{8,32}");
var hasLetterAndCharacter = new Regex(@"((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}");
var hasNumberAndCharacter = new Regex(@"(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}");
// Validat the passwords
for (int i = 0; i < passwords.Length; i++){
if((hasLetterAndNumber.IsMatch(passwords[i])) || (hasLetterAndCharacter.IsMatch(passwords[i])) || (hasNumberAndCharacter.IsMatch(passwords[i]))){
Console.WriteLine(passwords[i]);
Console.WriteLine("\n");
}
}
}
}
Regex通常从左到右解析字符串,但这些名为“lookaheads”的(?=xxx)
位会导致它验证该部分,而不会将数据包含到匹配的字符串中,也不会推进“光标”。
它使正则表达式看起来很复杂(并且在使用大字符串时可能会导致性能问题),但它确实完成了工作。尽管我同意FCin的评论,即您不需要正则表达式,但如果你问我,一个很大的好处是您可以将它们存储在设置文件中。
将您的示例分解:
^ Matches the start of the string
(?=.{8,}) Matches when there are at least 8 characters
(?=.*[a-z]) Matches when there is a lowercase letter anywhere
(?=.*[A-Z]) Matches when there is an uppercase letter anywhere
(?=.*[@#$%^&+=]) Matches when there is one of the indicated characters anywhere
.* Matches anything. No lookahead so this advances the "cursor"
$ Matches the end of the string
你只需要把小写字母和大写字母组合起来:
(?=.*[A-Za-z])
添加与数字匹配的数字:
(?=.*[0-9])
“长度”规则实际上可以在没有前瞻的情况下在最后一位中完成:
.{8,32}
与“特殊字符”一起,这将结合到:
^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}$
问题内容: 谁能帮助我创建用于密码验证的正则表达式。 条件为“密码必须包含8个字符和至少一个数字,一个字母和一个唯一字符,例如 问题答案:
问题内容: 我想要一个只接受数字和点的Java正则表达式。 例如, 点不应位于开始位置或结束位置。 问题答案: 我想这就是你想要的: 说明:接受以点分隔的数字;它以数字开头和结尾;一个数字可以有多个数字;一个不带点的数字也可以接受。 没有多个数字的变体: 需要至少一个点的变体: 不要忘记在Java中必须转义\符号,因此代码如下所示:
问题内容: 我正在尝试创建一个正则表达式来根据以下条件验证用户名: 仅包含 字母数字 字符, 下划线 和 点 。 下划线和点号不能位于用户名(例如/ / / )的 末尾 或 开头 。 下划线和点不能 彼此相邻 (例如)。 下划线或点不能被多次使用 的行中 (例如,/ )。 字符数必须在8到20之间。 到目前为止,这是我所做的;听起来它强制执行 除了第5条规则以外的 所有标准规则。我不知道如何添加第
本文向大家介绍请用正则表达式验证数字相关面试题,主要包含被问及请用正则表达式验证数字时的应答技巧和注意事项,需要的朋友参考一下 /[0一9]*$/
问题内容: 我正在尝试使用以下规则在Java中使用用户名链: 长度> = 3 有效字符:az,AZ,0-9,点,破折号和下划线。 有人可以帮我提供正则表达式吗? 问题答案: 试试这个正则表达式:
我有一个正则表达式来从完整命令中提取脚本名。它适用于大多数情况,但不适用于示例数据中的第一行。 抽样资料 输出应该是 正则表达式不适用于第一行 https://regex101.com/r/cFjn85/1