【问题标题】:form validation allow only english alphabet characters表单验证只允许英文字母字符
【发布时间】:2013-03-08 23:01:26
【问题描述】:

我想限制我的表单输入不能输入非英文字符。例如,所有中文、日文、西里尔文,也包括单个字符,如:à、â、ù、û、ü、ô、î、ê。这可能吗?我是否必须在我的 MVC 应用程序上设置语言环境,或者只是进行正则表达式文本框验证?顺便说一句,我希望能够输入数字和其他字符。我只希望这排除字母。

请指教,谢谢

【问题讨论】:

    标签: c# asp.net regex asp.net-mvc-3


    【解决方案1】:

    为此,您必须使用 Unicode 字符属性和块。每个 Unicode 代码点都分配了一些属性,例如这一点是一封信。块是代码点范围。

    更多详情见:

    那些 Unicode 属性和块写成\p{Name},其中“名称”是属性或块的名称。

    当它是像 \P{Name} 这样的大写“P”时,它是属性/块的否定,即它匹配其他任何东西。

    有例如一些属性(只是一小段摘录):

    • L ==> 所有字母字符。
    • Lu ==> 字母,大写
    • Ll ==> 字母,小写
    • N ==> 所有数字。这包括 Nd、Nl 和 No 类别。
    • Pc ==> 标点符号,连接符
    • P ==> 所有标点符号。这包括 Pc、Pd、Ps、Pe、Pi、Pf 和 Po 类别。
    • Sm ==> 符号,数学

    有例如一些块(仅一小段摘录):

    • 0000 - 007F ==> IsBasicLatin
    • 0400 - 04FF ==> 西里尔文
    • 1000 - 109F ==> 缅甸

    我在解决方案中使用的:

    \P{L} 是一个字符属性,它匹配任何不是字母的字符(“L”代表字母)

    \p{IsBasicLatin} 是一个匹配代码点 0000 - 007F 的 Unicode 块

    所以你的正则表达式是:

    ^[\P{L}\p{IsBasicLatin}]+$
    

    简单来说:

    这匹配一个从头到尾的字符串(^$),当 ASCII 表中只有(至少一个)非字母或字符时(doce 点 0000 - 007F)

    一个简短的 c# 测试方法:

    string[] myStrings = { "Foobar",
        "Foo@bar!\"§$%&/()",
        "Föobar",
        "fóÓè"
    };
    
    Regex reg = new Regex(@"^[\P{L}\p{IsBasicLatin}]+$");
    
    foreach (string str in myStrings) {
        Match result = reg.Match(str);
        if (result.Success)
            Console.Out.WriteLine("matched ==> " + str);
        else
            Console.Out.WriteLine("failed ==> " + str);
    }
    
    Console.ReadLine();
    

    打印:

    匹配 ==> Foobar
    匹配 ==> Foo@bar!\"§$%&/()
    失败 ==> Föobar
    失败 ==> fóÓè

    【讨论】:

    • [\P{L}\p{IsBasicLatin}] 不会匹配非英语非字母吗?例如其他类型的数字,如٠١٢٣٤?我不认为这是想要的。似乎他只想匹配基本的 ASCII 字符。
    • 是的,当然。这就是我所理解的,只需排除非 ASCII 字母(并匹配所有其他 Unicode 字符)。如果这种理解是错误的,那么解决方案非常简单,并且已经接受了答案,但这是非常基本的正则表达式知识,不能证明赏金是合理的。
    【解决方案2】:

    您可以在 ViewModel 上使用正则表达式属性来限制它

    public class MyViewModel
    {
        [System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
        public string MyEntry
        {
           get;
           set;
        }
    }
    

    【讨论】:

    • 这匹配 a-z 和 A-Z 0-9 和其他字符怎么样:/.,;'[]-= 等等。
    • 我添加了一个答案,它是否朝着“详细的规范答案”所期望的方向发展
    【解决方案3】:

    您可以使用正则表达式[\x00-\x80]+[\u0000-\u0080]+。尚未测试,但认为它也应该在 C# 中工作。

    改编自:Regular expression to match non-English characters?

    您可以对文本框使用正则表达式验证,也可以在服务器上进行验证。

    【讨论】:

      【解决方案4】:

      也许这个对你有帮助:=

      private void Validate(TextBox textBox1)
      {
       Regex rx = new Regex("[^A-Z|^a-z|^ |^\t]");
       if (rx.IsMatch(textBoxControl.Text))
        throw new Exception("Your error message");
      }
      

      有用的链接:-

      http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/84e4f7fa-5fff-427f-8c0e-d478cb38fa12

      http://www.c-sharpcorner.com/Forums/Thread/177046/allow-only-20-alphabets-and-numbers-in-textbox-using-reg.aspx

      【讨论】:

        【解决方案5】:

        这可能会有所帮助,但不是有效的方法,而是简单的非注册验证

        foreach (char c in inputTextField)
        {
               if ((int)(c) > 127)
                  {
                     // expection or your logic whatever you want to return
                  }
        
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-07
          • 2011-03-05
          • 2013-04-26
          • 2013-11-04
          • 2015-02-20
          • 2019-02-10
          • 1970-01-01
          相关资源
          最近更新 更多