表单验证仅允许英文字母字符

时间:2013-03-08 23:01:26

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

我想限制我的表单输入输入非英文字符。例如,所有中文,日文,Cyrllic,还有单个字符,如:à,â,ù,û,ü,ô,î,ê。这可能吗?我是否必须在我的MVC应用程序上设置区域设置,或者只是进行正则表达式文本框验证?只是旁注,我希望能够输入数字和其他字符。我只想要这个以排除字母。

请指教,谢谢

5 个答案:

答案 0 :(得分:9)

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

有关详细信息,请参阅:

这些Unicode属性和块被写为\p{Name},其中“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 ==> IsCyrillic
  • 1000 - 109F ==> IsMyanmar

我在解决方案中使用了什么:

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

\p{IsBasicLatin}是一个与代码点0000 - 007F

匹配的Unicode块

所以你的正则表达式是:

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

简单来说:

匹配从开头到结尾的字符串(^$),当ASCII表中只有(至少一个)非字母或字符时(doce points 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();

<强>打印

  

匹配==&gt; Foobar的
  匹配==&gt;富@条\“§$%&安培;!/()
  失败==&gt; Foobar的
  失败==&gt; fóÓè

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

可能是这一个帮助你:=

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

答案 4 :(得分:0)

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

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

 }