我想用正则表达式检查车牌的格式是否正确,但这是我编写的代码,我所有的车牌都是橙色的,所以函数无论如何都会返回 false。我该如何修复它?
static bool PlakaFormat(string plaka)
{
string[] formatlar =
{
@"^\d{2}\s[A-Z]\s\d{4}$",
@"^\d{2}\s[A-Z]\s\d{5}$",
@"^\d{2}\s[A-Z]{2}\s\d{3}$",
@"^\d{2}\s[A-Z]{2}\s\d{4}$",
@"^\d{2}\s[A-Z]{3}\s\d{2}$",
@"^\d{2}\s[A-Z]{3}\s\d{3}$"
};
foreach (var format in formatlar)
{
if (Regex.IsMatch(plaka, format))
{
return true;
}
}
return false;
}
private void btn_kontrol_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow rows in dataGridView1.Rows)
{
string plaka = rows.Cells[0].Value?.ToString();
if (!string.IsNullOrEmpty(plaka))
{
if (!PlakaFormat(plaka))
{
rows.Cells[0].Style.BackColor = Color.Orange;
}
else
{
}
}
else
{
rows.Cells[0].Style.BackColor = dataGridView1.DefaultCellStyle.BackColor;
}
}
}
我尝试在按钮而不是函数中编写并执行此操作,但仍然失败。
\s
似乎是问题所在,因为在评论中您提供了plaka"34ASD123"
请参阅此RegexCheatSheet
将正则表达式更改为:
string[] formatlar =
{
@"^\d{2}[A-Z]\d{4}$", // Matches "34A1234"
@"^\d{2}[A-Z]\d{5}$", // Matches "34A12345"
@"^\d{2}[A-Z]{2}\d{3}$", // Matches "34AS123"
@"^\d{2}[A-Z]{2}\d{4}$", // Matches "34AS1234"
@"^\d{2}[A-Z]{3}\d{2}$", // Matches "34ASD12"
@"^\d{2}[A-Z]{3}\d{3}$" // Matches "34ASD123"
};
这样你的盘子就不需要空格字符..
这里更新了您提供的代码,以便您可以看到哪些板正在工作,哪些不工作:
static bool PlakaFormat(string plaka)
{
string[] formatlar =
{
@"^\d{2}[A-Z]\d{4}$",
@"^\d{2}[A-Z]\d{5}$",
@"^\d{2}[A-Z]{2}\d{3}$",
@"^\d{2}[A-Z]{2}\d{4}$",
@"^\d{2}[A-Z]{3}\d{2}$",
@"^\d{2}[A-Z]{3}\d{3}$"
};
foreach (var format in formatlar)
{
if (Regex.IsMatch(plaka, format))
{
return true;
}
}
return false;
}
private void btn_kontrol_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
string plaka = row.Cells[0].Value?.ToString();
if (!string.IsNullOrEmpty(plaka))
{
if (PlakaFormat(plaka))
{
// If the format is correctdefault
row.Cells[0].Style.BackColor = Color.LightGreen;
}
else
{
// If the format is incorrect
row.Cells[0].Style.BackColor = Color.Orange;
}
}
else
{
// Reset to default if no plate is provided
row.Cells[0].Style.BackColor = dataGridView1.DefaultCellStyle.BackColor;
}
}
}