c# 中的正则表达式 "AND"
Regex in c# with an "AND"
我有以下方法:
public static bool isUeiFormatOK(string test)
{
string pattern = "[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]";
MatchCollection matches;
Regex regex = new Regex(pattern);
matches = regex.Matches(test);
if (matches.Count == 0)
return false;
return true;
}
这验证字符串是 12 个字符并且包含数字或字母。
怎么说,其中一个字符必须是数字?
为了便于阅读,最好使用两个不同的匹配项,但也可以使用一个。
^
(?= .* [0-9] )
[A-Za-z0-9]{12}
$
(?= ... )
是前瞻性的。它匹配零个字符,但仅当内部模式在当前位置匹配时才会成功。
完整的解决方案:
private static Regex valid_re = new Regex(
@"
^
(?= .* [0-9] )
[A-Za-z0-9]{12}
$
",
RegexOptions.IgnorePatternWhitespace // | RegexOptions.Compiled
);
public static bool isUeiFormatOK(string test) {
return valid_re.IsMatch(test);
}
您也可以使用纯 C# 代码来完成。
public static bool IsUeiFormatOk(string input)
{
bool hasDigit = false;
foreach (char character in input)
{
if (char.IsDigit(character))
{
hasDigit = true;
continue;
}
if (IsEnglishLetter(character))
{
continue;
}
return false;
}
return hasDigit;
}
public static bool IsEnglishLetter(this char letter) =>
letter is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
您可以使用量词 {12}
来缩短模式,并使用正向先行断言数字,首先可以选择匹配字符 class 的相同允许字符,但不包含数字。
^(?=[A-Za-z]*[0-9])[A-Za-z0-9]{12}$
^
字符串开头
(?=[A-Za-z]*[0-9])
正面前瞻,断言右边的可选字符 A-Za-z 后跟一个数字
[A-Za-z0-9]{12}
匹配 12 次出现的字符 A-Za-z 或数字 0-9
$
字符串结尾(或使用 \z
)
您不必计算匹配数,您可以 return IsMatch
的值代替。
public static bool isUeiFormatOK(string test)
{
return new Regex("^(?=[A-Za-z]*[0-9])[A-Za-z0-9]{12}$").IsMatch(test);
}
我有以下方法:
public static bool isUeiFormatOK(string test)
{
string pattern = "[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]";
MatchCollection matches;
Regex regex = new Regex(pattern);
matches = regex.Matches(test);
if (matches.Count == 0)
return false;
return true;
}
这验证字符串是 12 个字符并且包含数字或字母。
怎么说,其中一个字符必须是数字?
为了便于阅读,最好使用两个不同的匹配项,但也可以使用一个。
^
(?= .* [0-9] )
[A-Za-z0-9]{12}
$
(?= ... )
是前瞻性的。它匹配零个字符,但仅当内部模式在当前位置匹配时才会成功。
完整的解决方案:
private static Regex valid_re = new Regex(
@"
^
(?= .* [0-9] )
[A-Za-z0-9]{12}
$
",
RegexOptions.IgnorePatternWhitespace // | RegexOptions.Compiled
);
public static bool isUeiFormatOK(string test) {
return valid_re.IsMatch(test);
}
您也可以使用纯 C# 代码来完成。
public static bool IsUeiFormatOk(string input)
{
bool hasDigit = false;
foreach (char character in input)
{
if (char.IsDigit(character))
{
hasDigit = true;
continue;
}
if (IsEnglishLetter(character))
{
continue;
}
return false;
}
return hasDigit;
}
public static bool IsEnglishLetter(this char letter) =>
letter is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
您可以使用量词 {12}
来缩短模式,并使用正向先行断言数字,首先可以选择匹配字符 class 的相同允许字符,但不包含数字。
^(?=[A-Za-z]*[0-9])[A-Za-z0-9]{12}$
^
字符串开头(?=[A-Za-z]*[0-9])
正面前瞻,断言右边的可选字符 A-Za-z 后跟一个数字[A-Za-z0-9]{12}
匹配 12 次出现的字符 A-Za-z 或数字 0-9$
字符串结尾(或使用\z
)
您不必计算匹配数,您可以 return IsMatch
的值代替。
public static bool isUeiFormatOK(string test)
{
return new Regex("^(?=[A-Za-z]*[0-9])[A-Za-z0-9]{12}$").IsMatch(test);
}