13

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

请指教,谢谢

4

5 回答 5

10

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

有关更多详细信息,请参阅:

这些 Unicode 属性和块被写入\p{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 ==> 西里尔文
  • 1000 - 109F ==> 缅甸

我在解决方案中使用的内容:

\P{L}是匹配任何非字母字符的字符属性(“L”表示字母)

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

所以你的正则表达式是:

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

简单来说:

这匹配从开始到结束的字符串(^$),当 ASCII 表中只有(至少一个)非字母或字符时(文档点 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óÓè

于 2013-03-13T07:41:18.553 回答
1

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

public class MyViewModel
{
    [System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
    public string MyEntry
    {
       get;
       set;
    }
}
于 2013-03-08T23:07:15.730 回答
1

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

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

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

于 2013-03-08T23:43:11.820 回答
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

于 2013-03-14T12:59:25.170 回答
0

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

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

 }
于 2013-03-09T00:48:05.213 回答