【问题标题】:Regular expression check allowing character input允许字符输入的正则表达式检查
【发布时间】:2015-03-12 13:46:53
【问题描述】:

我正在使用远程农场模型进行数据验证并检查省份代码我不断收到一个错误,不接受两个字符。我需要省份代码长度为 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);
    }          
}

【问题讨论】:

  • 你的意思是它不允许你输入任何字母?这听起来像是您的观点有问题
  • 抱歉,它让我可以输入字母,但检查失败。我会在我的问题中解决这个问题

标签: c# regex asp.net-mvc


【解决方案1】:

您的代码有几个问题:

  1. provinceCode.ToUpper() 不会改变 provinceCode 的值。您需要将其分配给 provinceCode = provinceCode.ToUpper()

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

    if (!justLetters.IsMatch(provinceCode))
    
  3. 最后(感谢 Carnivorus)您的 Regex 只查找一个大写字母。如果您更改您的正则表达式,您可以将前两个 if 语句合并为一个:

    var justLetters = new Regex("^[A-Z]{2}$");
    

正如对您的代码的一般小改进一样,您无需在此处使用elseif,因为无论如何您要在if 语句中返回。

【讨论】:

  • 并且正则表达式正好匹配一个大写字符。
  • 和 3. Carnivorus 的回答
  • 同意@juharr 和 hometoast
  • 谢谢,我没有意识到我忘记将 .toUpper() 分配给 ProvinceCode,
【解决方案2】:

这里不需要正则表达式,linq 是你的朋友:

if(provinceCode.All(x=> Char.IsLetter(x))
{
   // valid
}

或:

if(provinceCode.Length!=2 && provinceCode.Any(x=> !Char.IsLetter(x))
{
   // not valid
}

【讨论】:

  • 更好。正则表达式可能比简单的长度检查要慢,如果两个字符都大写。
【解决方案3】:

您的 RegEx 仅查找 1 个大写字母。您需要使用 ^[A-Z]{2}$ 恰好代表 2 个大写字母

【讨论】:

  • 我已将您的答案作为我的一部分引用,所以 +1
【解决方案4】:
 provinceCode = provinceCode.ToUpper();

ToUpper() 不会改变当前值,它返回 ToUpper'd 值

【讨论】:

  • 会不会不允许正则表达式通过?
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 2017-11-30
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多