我想限制我的表单输入输入非英文字符。例如,所有中文,日文,Cyrllic,还有单个字符,如:à,â,ù,û,ü,ô,î,ê。这可能吗?我是否必须在我的MVC应用程序上设置区域设置,或者只是进行正则表达式文本框验证?只是旁注,我希望能够输入数字和其他字符。我只想要这个以排除字母。
请指教,谢谢
我想限制我的表单输入输入非英文字符。例如,所有中文,日文,Cyrllic,还有单个字符,如:à,â,ù,û,ü,ô,î,ê。这可能吗?我是否必须在我的MVC应用程序上设置区域设置,或者只是进行正则表达式文本框验证?只是旁注,我希望能够输入数字和其他字符。我只想要这个以排除字母。
请指教,谢谢
为此,您必须使用Unicode字符属性和块。每个Unicode代码点都分配了一些属性,例如这一点是一封信。块是代码点范围。
有关详细信息,请参阅:
编写那些Unicode属性和块 \p{Name}
,其中“Name”是属性或块的名称。
当它是这样的大写“P”时 \P{Name}
,然后它是属性/块的否定,即它匹配任何其他东西。
例如有一些属性(只是一个简短的摘录):
例如有一些块(只是一个简短的摘录):
我在解决方案中使用的内容:
\P{L}
是一个匹配任何非字母字符的字符属性(Letter为“L”)
\p{IsBasicLatin}
是一个与代码点0000 - 007F匹配的Unicode块
所以你的正则表达式是:
^[\P{L}\p{IsBasicLatin}]+$
用简单的话说:
这匹配从开头到结尾的字符串(^
和 $
),当(至少有一个)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();
打印:
匹配==> Foobar
匹配==> Foo @ bar!\“§$%&/()
失败==>Föobar
失败==>fóÓè
为此,您必须使用Unicode字符属性和块。每个Unicode代码点都分配了一些属性,例如这一点是一封信。块是代码点范围。
有关详细信息,请参阅:
编写那些Unicode属性和块 \p{Name}
,其中“Name”是属性或块的名称。
当它是这样的大写“P”时 \P{Name}
,然后它是属性/块的否定,即它匹配任何其他东西。
例如有一些属性(只是一个简短的摘录):
例如有一些块(只是一个简短的摘录):
我在解决方案中使用的内容:
\P{L}
是一个匹配任何非字母字符的字符属性(Letter为“L”)
\p{IsBasicLatin}
是一个与代码点0000 - 007F匹配的Unicode块
所以你的正则表达式是:
^[\P{L}\p{IsBasicLatin}]+$
用简单的话说:
这匹配从开头到结尾的字符串(^
和 $
),当(至少有一个)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();
打印:
匹配==> Foobar
匹配==> Foo @ bar!\“§$%&/()
失败==>Föobar
失败==>fóÓè
您可以在ViewModel上使用正则表达式属性来限制它
public class MyViewModel
{
[System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
public string MyEntry
{
get;
set;
}
}
你可以使用正则表达式 [\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");
}
有用的链接: -
这可能有所帮助,但不是有效的方式,而是简单的非reg验证
foreach (char c in inputTextField)
{
if ((int)(c) > 127)
{
// expection or your logic whatever you want to return
}
}