表单validation仅允许英文字母字符

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

请指教,谢谢

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

有关详细信息,请参阅:

  • regular-expressions.info获取有关Unicode代码点,字符属性,脚本和块的一些常规信息

  • MSDN支持.net中支持的属性和块

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

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

有一些属性(只有一个简短的摘录):

  • L ==>所有字母字符。
  • Lu ==> Letter,大写
  • Ll ==> Letter,小写
  • 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}是一个字符属性,匹配任何非字母字符(Letter为“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(); 

打印:

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

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

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

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

改编自: 正则表达式匹配非英语字符?

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

也许这一个帮助你:=

 private void Validate(TextBox textBox1) { Regex rx = new Regex("[^AZ|^az|^ |^\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

这可能有所帮助,但不是有效的方式,而是简单的非regvalidation

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