带数组的正则表达式

问题描述 投票:0回答:1

我想用正则表达式检查车牌的格式是否正确,但这是我编写的代码,我所有的车牌都是橙色的,所以函数无论如何都会返回 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;
        }
    }
}

我尝试在按钮而不是函数中编写并执行此操作,但仍然失败。

c# arrays winforms validation
1个回答
0
投票

\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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.