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

本文关键字:英文字母 字符 验证 表单 | 更新日期: 2023-09-27 18:03:15

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

请指教,谢谢

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

为此,您必须使用Unicode字符属性和块。每个Unicode码点都被分配了一些属性,例如:this point is a Letter。块是代码点范围。

详细信息请参见:

  • regular-expressions.info关于Unicode码点、字符属性、脚本和块的一般信息

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

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

当它是一个大写的"p",如'P{Name},那么它是属性/块的否定,即它匹配其他任何内容。

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

  • 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}是一个Unicode块,它匹配代码点0000 - 007F

所以你的正则表达式应该是:

^['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();

打印:

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

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

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

您可以使用regex ['x00-'x80]+['u0000-'u0080]+。还没有测试,但我认为它应该也可以在c#中工作。

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

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

也许这句话能帮到你:=

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 - 5 - fff - 427 f - 8 c0e - d478cb38fa12

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

这可能有帮助,但不是有效的方法,而是简单的非正则验证

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