根据DB中的州,我有州的州号和州的车辆信件。州号可以是旧的和新的类型。
新型州号的示例。
旧状态编号的示例。
粗体字符表示指定的状态。
用户将输入他的汽车状态编号并选择状态。我需要验证如果州号可以在选定的州注册。如果不可能(错误的用户输入)我将向他显示消息,如"您输入错误的州号或州" 。
我使用 If-Else 语句完成此操作。但我想通过 正则表达式 了解另一种方式。
我认为,这将是两个条件步骤。
第一个条件我有 正则表达式 声明:
^(?i)f
- 州字母为f
。
答案 0 :(得分:2)
以下是您的需求:
^[Aa].*[01][2]$
有几点解释:
^ assert position at start of a line
[Aa] match a single character present in the list below
Aa a single character in the list Aa literally
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
[01] match a single character present in the list below
01 a single character in the list 01 literally
[2] match a single character present in the list below
2 the literal character 2
$ assert position at end of a line
如果您需要以任何字母:
开头^[A-Za-z].*[01][2]$
我会使用这个正则表达式:
^[A-Z].{6}|.{5}\d{2}$
保证输入是:
答案 1 :(得分:2)
正如您进一步解释的那样,您确实希望在开头匹配任何字母,并在字符串末尾任意两位数字,使用正则表达式是确实是解决这个问题的最短途径。
Regex re = new Regex("^[a-z].*[0-9]{2}$", RegexOptions.IgnoreCase);
Console.WriteLine(re.IsMatch("Apple02")); // true
Console.WriteLine(re.IsMatch("Arrow")); // false
Console.WriteLine(re.IsMatch("45Alty12")); // false
Console.WriteLine(re.IsMatch("Basci98")); // true
否则,如果您的要求很简单,例如只是开头的A
或a
字母,最后是12
或02
,那么您也可以在没有正则表达式的情况下轻松解决此问题:
bool Match(string s)
{
if (string.IsNullOrWhiteSpace(s))
return false;
if (s[0] != 'a' && s[0] != 'A')
return false;
return s.EndsWith("02") || s.EndsWith("12");
}
示例:
Console.WriteLine(Match("Apple02")); // true
Console.WriteLine(Match("Arrow")); // false
Console.WriteLine(Match("45Alty12")); // false
Console.WriteLine(Match("a12")); // true
Console.WriteLine(Match("a")); // false
Console.WriteLine(Match("12")); // false
当然,您也可以扩展它以满足您更复杂的要求。在您的情况下,您可以使用char.IsLetter
和char.IsDigit
进行检查:
bool Match(string s)
{
if (string.IsNullOrWhiteSpace(s))
return false;
return s.Length > 2 && char.IsLetter(s[0]) &&
char.IsDigit(s[s.Length - 1]) && char.IsDigit(s[s.Length - 2]);
}
请注意,IsLetter
方法也接受来自非英文字母的字母,因此您可能需要更改它。你也可以像这样进行比较:
bool Match(string s)
{
if (string.IsNullOrWhiteSpace(s))
return false;
return s.Length > 2 &&
((s[0] >= 'a' && s[0] <= 'z') || (s[0] >= 'A' && s[0] <= 'Z'))
char.IsDigit(s[s.Length - 1]) && char.IsDigit(s[s.Length - 2]);
}