【发布时间】:2013-03-08 23:01:26
【问题描述】:
我想限制我的表单输入不能输入非英文字符。例如,所有中文、日文、西里尔文,也包括单个字符,如:à、â、ù、û、ü、ô、î、ê。这可能吗?我是否必须在我的 MVC 应用程序上设置语言环境,或者只是进行正则表达式文本框验证?顺便说一句,我希望能够输入数字和其他字符。我只希望这排除字母。
请指教,谢谢
【问题讨论】:
标签: c# asp.net regex asp.net-mvc-3
我想限制我的表单输入不能输入非英文字符。例如,所有中文、日文、西里尔文,也包括单个字符,如:à、â、ù、û、ü、ô、î、ê。这可能吗?我是否必须在我的 MVC 应用程序上设置语言环境,或者只是进行正则表达式文本框验证?顺便说一句,我希望能够输入数字和其他字符。我只希望这排除字母。
请指教,谢谢
【问题讨论】:
标签: c# asp.net regex asp.net-mvc-3
为此,您必须使用 Unicode 字符属性和块。每个 Unicode 代码点都分配了一些属性,例如这一点是一封信。块是代码点范围。
更多详情见:
那些 Unicode 属性和块写成\p{Name},其中“名称”是属性或块的名称。
当它是像 \P{Name} 这样的大写“P”时,它是属性/块的否定,即它匹配其他任何东西。
有例如一些属性(只是一小段摘录):
有例如一些块(仅一小段摘录):
我在解决方案中使用的:
\P{L} 是一个字符属性,它匹配任何不是字母的字符(“L”代表字母)
\p{IsBasicLatin} 是一个匹配代码点 0000 - 007F 的 Unicode 块
所以你的正则表达式是:
^[\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();
打印:
匹配 ==> Foobar
匹配 ==> Foo@bar!\"§$%&/()
失败 ==> Föobar
失败 ==> fóÓè
【讨论】:
[\P{L}\p{IsBasicLatin}] 不会匹配非英语非字母吗?例如其他类型的数字,如٠١٢٣٤?我不认为这是想要的。似乎他只想匹配基本的 ASCII 字符。
您可以在 ViewModel 上使用正则表达式属性来限制它
public class MyViewModel
{
[System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
public string MyEntry
{
get;
set;
}
}
【讨论】:
您可以使用正则表达式[\x00-\x80]+ 或[\u0000-\u0080]+。尚未测试,但认为它也应该在 C# 中工作。
改编自:Regular expression to match non-English characters?
您可以对文本框使用正则表达式验证,也可以在服务器上进行验证。
【讨论】:
也许这个对你有帮助:=
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");
}
有用的链接:-
【讨论】:
这可能会有所帮助,但不是有效的方法,而是简单的非注册验证
foreach (char c in inputTextField)
{
if ((int)(c) > 127)
{
// expection or your logic whatever you want to return
}
}
【讨论】: