我们可以使用正则表达式来查明字符串是否遵循这些规则吗?
答案 0 :(得分:2)
从记忆中;
"^[^A-Z]*$"
"^[A-Za-z].*"
".*\d+.*"
"[A-Za-z0-9@#\$]{,8}"
现在你应该能够相当简单地将“have”子句组合在“任意一种方式”中,但是我不知道是否可能实际上有一个正则表达式在逻辑上是“不是这个,但是其中一个,这个或这个“。 也许其他海报可以做到这一点!
如果您不确定您的正则表达式,我可以推荐“Expresso”一个非常有用的免费正则表达式探索工具。只是谷歌吧!
答案 1 :(得分:2)
编辑:我已经将代码中的正则表达式更新为一个看似有效的表达式。
@"^[a-z](?=[a-z0-9@#\$]*[0-9][a-z0-9@#\$]*)[a-z0-9@#\$]{0,6}[a-z@#\$]$"
编辑:我已经调整了代码。其中一项测试是aa1@aaaa
标记为道格拉斯指出它应该成功时会失败。
我已经证实道格拉斯提供的正则表达式同样适用,而且它也更短。
不是这样的答案,但这是一个快速的试验台。我使用了@ ShaunWilde回答的正则表达式和测试。
不幸的是,测试没有返回预期的结果: - |。
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace StackOverflow.RegularExpressions
{
internal class Program
{
private static void Main(string[] args)
{
var validString =
new Regex(@"^[a-z][a-z\d!@#$%\^&*()\-+]{0,7}$(?<=\d\D+)",
RegexOptions.Compiled);
var testsAndExpectedResults = new List<Tuple<string, bool>>
{
new Tuple<string, bool>("a1@aaaaa", true),
new Tuple<string, bool>("a@1aaaaa", true),
new Tuple<string, bool>("aa@aaaaa", false),
new Tuple<string, bool>("a1@aaaaaaa", false),
new Tuple<string, bool>("a1@aaaa", true),
new Tuple<string, bool>("1a1@aaaa", false),
new Tuple<string, bool>("aa1@aaaa", true),
new Tuple<string, bool>("Aa1@aaaa", false),
new Tuple<string, bool>("Aa1@aaaA", false),
new Tuple<string, bool>("aA1@aaaA", false),
new Tuple<string, bool>("#A@a1aaaaa", false)
};
testsAndExpectedResults.ForEach(t =>
Console.WriteLine("With '{0}' expected {1}, got {2}", t.Item1, t.Item2,
validString.IsMatch(t.Item1))
);
Console.ReadKey();
}
}
}
答案 2 :(得分:1)
首先在谷歌搜索"password validation regular expression"
给我们
^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
其中
现在只需要调整8个字符(最小值)并且在开头和结尾没有数字而没有大写字母并以字母开头
^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[@#$%^&+=])([a-z][^0-9A-Z])[^A-Z]*[^0-9A-Z]$
在线测试
1 a1@aaaaa Yes
2 a1@aaaaaaa Yes
3 a1@aaaa No
4 1a@aaaaa No
5 aa@aaaa1 No
6 Aa@aa1aa No
7 aa@a1aaA No
8 aA@a1aaa No
9 #A@a1aaaaa No
我建议你阅读第一篇文章,了解它是如何构建的(我学到了很多东西)并使用第二个链接(尽管还有许多其他在线正则表达式测试器)来使用正则表达式,而无需一直编译代码
答案 3 :(得分:1)
Regex regex = new Regex(@"^[a-z][a-z\d!@#$%\^&*()\-+]{0,7}$(?<=\d\D+)");
bool isValid = regex.IsMatch(password);
A-Z
或\w
。^[a-z]
。 ^
是字符串起始锚。[a-z\d]{0,7}
匹配0-7个字母数字字符。 (此第一个字母将与前面的[a-z]
匹配。)也可以在字符类中指定任何其他允许的字符。 ^
和-
需要转义。(?<=\d\D+)
。 \d\D+
表示由一个或多个非数字跟随的数字。由于第二个条件,开头可能不会出现数字。