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

bob*_*bek 12 c# regex asp.net asp.net-mvc-3

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

请指教,谢谢

ste*_*ema 9

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

有关详细信息,请参阅:

写入这些Unicode属性和块\p{Name},其中"Name"是属性或块的名称.

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

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

  • L ==>所有字母字符.
  • 卢==>信,大写
  • 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} 是一个字符属性,匹配任何不是字母的字符(字母"L")

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

所以你的正则表达式是:

^[\P{L}\p{IsBasicLatin}]+$
Run Code Online (Sandbox Code Playgroud)

用简单的话说:

这匹配从开头到结尾的字符串(^$),当(至少有一个)只有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();
Run Code Online (Sandbox Code Playgroud)

打印:

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