正则表达式检查允许字符输入

Ste*_*e N 1 c# regex asp.net-mvc

我正在使用农场模型的遥控器进行数据验证并检查省代码我一直收到一个不接受两个字符的错误.我需要省代码长2个字母并检查它们是否实际上是字母.下面是RemoteController的代码:

public JsonResult provinceCodeCheck(string provinceCode)
{
    Regex justLetters = new Regex("^[A-Z]$");
    provinceCode.ToUpper();
    var provinceCodes = db.provinces.Find(provinceCode);

    if (provinceCode.Length != 2)
    {
        return Json("The Province must be 2 letters long",
           JsonRequestBehavior.AllowGet);
    }
    else if (!justLetters.Equals(provinceCode))
    {
        return Json("The Province is not letters",
           JsonRequestBehavior.AllowGet);
    }
    else if (provinceCodes == null)
    {
        return Json("The Province is not supported, sorry for the         inconvenience",
           JsonRequestBehavior.AllowGet);
    }
    else
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }          
}
Run Code Online (Sandbox Code Playgroud)

edi*_*ode 6

您的代码有几个问题:

  1. provinceCode.ToUpper()不改变的价值provinceCode.你需要分配它provinceCode = provinceCode.ToUpper()

  2. !justLetters.Equals(provinceCode)检查是否Regex等于字符串provinceCode.您需要使用Regex.IsMatch():

    if (!justLetters.IsMatch(provinceCode))
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后(感谢Carnivorus在这里)你Regex只需要一个大写字母.如果你改变你的正则表达式,你可以将前两个if语句合并为一个:

    var justLetters = new Regex("^[A-Z]{2}$");
    
    Run Code Online (Sandbox Code Playgroud)

就像对代码的一般改进一样,你也不需要在elseif这里使用,因为你if无论如何都要在语句中返回.