C# 表单验证只允许使用英文字母字符

C# 表单验证只允许使用英文字母字符,c#,asp.net,regex,asp.net-mvc-3,C#,Asp.net,Regex,Asp.net Mvc 3,我想限制我的表单输入,不要输入非英语字符。例如,所有的中文、日文、西里尔文,但也有单个字符,如:a、–、ù、ù、ü、î、î。这可能吗?我是否必须在我的MVC应用程序上设置区域设置,或者只是执行regex文本框验证?只是一个旁注,我想能够输入数字和其他字符。我只想把字母排除在外 请给出建议,谢谢您可以在ViewModel上使用正则表达式属性来限制此操作 public class MyViewModel { [System.ComponentModel.DataAnnotations.Reg

我想限制我的表单输入,不要输入非英语字符。例如,所有的中文、日文、西里尔文,但也有单个字符,如:a、–、ù、ù、ü、î、î。这可能吗?我是否必须在我的MVC应用程序上设置区域设置,或者只是执行regex文本框验证?只是一个旁注,我想能够输入数字和其他字符。我只想把字母排除在外


请给出建议,谢谢

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

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

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

改编自:


您可以对textbox使用regex验证,也可以在服务器上进行验证。

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

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

 }

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

有关详细信息,请参阅:

这些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==>Iscrylical
  • 1000-109F==>IsMyanmar
我在解决方案中使用的内容:

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();
\p{L}
是一个字符属性,它匹配任何非字母的字符(“L”表示字母)

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

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

^[\P{L}\p{IsBasicLatin}]+$
简单地说:

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();
当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();
打印:

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óÓè


也许这个能帮助你:=

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");
}
有用链接:-


这与a-z和a-z匹配,0-9和其他字符:/,;'[]-=等等。我添加了一个答案,它是否朝着“详细规范答案”所期望的方向发展,不会
[\p{L}\p{IsBasicLatin}]
匹配非英语非字母?例如,其他类型的数字,如٠١٣٤?我不认为这是需要的。似乎他只是想匹配基本的ASCII字符。是的,当然。这就是我理解的,只需排除非ASCII字母(并匹配所有其他Unicode字符)。如果这种理解是错误的,那么解决方案非常简单,并且已经有了公认的答案,但这是非常基本的正则表达式知识,不能证明赏金是合理的。