C# 新南方共同市场牌照Regex
新的南方共同市场牌照有以下规则:C# 新南方共同市场牌照Regex,c#,.net,regex,C#,.net,Regex,新的南方共同市场牌照有以下规则: 必须有7个字母数字,其中: 4是字母(A-Z) 3是数字(\d) 无论如何,字母和数字都可以混洗 因此以下文本有效:AB123CD、1A2B3CD、123ABCD、ABCD123 这些是无效的:ABC1234D、ABCDE12、ABC123等 我知道我可以通过代码来实现这一点,只需检查字符串大小并计算数字和字母,但这个问题让我想知道是否也可以通过正则表达式来实现 我所能想到的就是生成所有的可能性,比如(\d{3}[A-Z]{4}),(\d{2}[A-Z]
- 必须有7个字母数字,其中:
- 4是字母(A-Z)
- 3是数字(\d)
- 无论如何,字母和数字都可以混洗
关于如何使用lookarounds执行密码验证,您可以使用以下正则表达式实现该验证:
^(?=(?:.*[0-9]){3})(?=(?:.*[A-Z]){4})[A-Z0-9]{7}$
说明:
-向前看以检查是否有3位数字(?=(?:.[0-9]){3}
-向前看,检查4个字母(?=(?:.[A-Z]){4}
-由7个字母数字符号组成的实际字符串(不包括属于[A-Z0-9]{7}
模式的\w
)\u
^
和$
)的原因,应通过单个字符串以通过此测试
您可以通过添加适当的选项来添加不区分大小写的匹配
在Expresso中测试:
对于这种情况,从另一个方向(在psedudo代码中)看它会更容易: 我喜欢不走的风格
bool CheckPlate(string str)
{
int let = 0;
int dig = 0;
foreach (ch letter in input)
{
let += (int) IsLetter(ch);
dig += (int) IsDigit(ch);
}
if(let == 4 && dig == 3 && str.Lenght() == 7)
return true;
else
return false;
}
我补充了解释。如果您知道什么是前瞻性的,那么很快就会理解如何构建这样的正则表达式。我非常喜欢正则表达式紧凑的特性:其他答案需要几行,我的答案实际上是1。
bool CheckPlate(string str)
{
int let = 0;
int dig = 0;
foreach (ch letter in input)
{
let += (int) IsLetter(ch);
dig += (int) IsDigit(ch);
}
if(let == 4 && dig == 3 && str.Lenght() == 7)
return true;
else
return false;
}