我想限制輸入非英文字符的表單輸入。例如,所有中國人,日本人,Cyrllic,也包括單個字符,例如:à,ù,û,ü,ô,î,ê。這可能嗎?我必須在我的MVC應用程序上設置一個語言環境,或者只是做一個正則表達式文本框驗證?只是一個側面說明,我想能夠輸入數字和其他字符。我只想要這個排除字母。表單驗證只允許英文字母字符
請指教,謝謝
我想限制輸入非英文字符的表單輸入。例如,所有中國人,日本人,Cyrllic,也包括單個字符,例如:à,ù,û,ü,ô,î,ê。這可能嗎?我必須在我的MVC應用程序上設置一個語言環境,或者只是做一個正則表達式文本框驗證?只是一個側面說明,我想能夠輸入數字和其他字符。我只想要這個排除字母。表單驗證只允許英文字母字符
請指教,謝謝
爲此,您必須使用Unicode字符屬性和塊。每個Unicode碼點已經分配了一些屬性,例如,這一點是一封信。塊是代碼點範圍。
有關詳細信息,請參閱:
這些Unicode屬性和塊寫入\p{Name}
,其中 「名稱」 是屬性的名稱或阻止。
當它是一個像這樣的大寫「P」\P{Name}
,那麼它是屬性/塊的否定,即它匹配其他任何東西。
有例如一些屬性(僅一小段摘錄):
有例如一些塊(只有一小摘錄):
什麼我在解決方案中使用:
\P{L}
是一個字符屬性,它匹配任何不是字母的字符(Letter爲「L」)
\p{IsBasicLatin}
是一個Unicode塊碼點0000匹配 - 007F
所以,你的正則表達式是:
^[\P{L}\p{IsBasicLatin}]+$
在平淡的話:
這是一個字符串從匹配從開始到結尾(^
和$
),當存在(至少一個)非ASCII字符表中的非字母或字符(doce points 0000 - 007F)
短的C#測試方法:
string[] myStrings = { "Foobar",
"[email protected]!\"§$%&/()",
"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的
匹配==>富@條\「§$%& /()
failed ==>Föobar
failed ==>fóÓè
您可以使用正則表達式的屬性上的視圖模型來限制
public class MyViewModel
{
[System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
public string MyEntry
{
get;
set;
}
}
這符合az和AZ怎麼樣0-9和其他字符:/.,;'[]-=等等。 – 2013-03-11 16:33:40
我添加了一個答案,它是否符合您對「*詳細規範答案*」的期望方向 – stema 2013-03-13 07:42:37
您可以使用正則表達式[\x00-\x80]+
或[\u0000-\u0080]+
。沒有測試過,但認爲它也應該在C#中工作。
改編自:Regular expression to match non-English characters?
可以在服務器上使用正則表達式驗證的文本框和驗證也。
這可能幫助,沒有有效的方法,但簡單的非REG驗證
foreach (char c in inputTextField)
{
if ((int)(c) > 127)
{
// expection or your logic whatever you want to return
}
}
可能是這樣一個幫助您:=
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");
}
有用的鏈接: -
「[\ P {L} \ p {IsBasicLatin}]」是否與非英文非字母匹配?例如其他類型的數字,如?我不認爲這是想要的。似乎他只想匹配基本的ASCII字符。 – Qtax 2013-03-14 15:35:10
當然可以。這是我的理解,只是排除非ASCII字母(並匹配所有其他的Unicode字符)。如果這種理解是錯誤的,那麼解決方案非常簡單,已經在這裏接受了答案,但這是非常基本的正則表達式知識,並不能證明賞金。 – stema 2013-03-14 18:15:57