2013-03-08 535 views
11

我想限制輸入非英文字符的表單輸入。例如,所有中國人,日本人,Cyrllic,也包括單個字符,例如:à,ù,û,ü,ô,î,ê。這可能嗎?我必須在我的MVC應用程序上設置一個語言環境,或者只是做一個正則表達式文本框驗證?只是一個側面說明,我想能夠輸入數字和其他字符。我只想要這個排除字母。表單驗證只允許英文字母字符

請指教,謝謝

回答

9

爲此,您必須使用Unicode字符屬性和塊。每個Unicode碼點已經分配了一些屬性,例如,這一點是一封信。塊是代碼點範圍。

有關詳細信息,請參閱:

這些Unicode屬性和塊寫入\p{Name},其中 「名稱」 是屬性的名稱或阻止。

當它是一個像這樣的大寫「P」\P{Name},那麼它是屬性/塊的否定,即它匹配其他任何東西。

有例如一些屬性(僅一小段摘錄):

  • L ==>所有字母字符。
  • 魯==>字母,大寫
  • 的L1 ==>字母,小寫
  • ñ==>所有數字。這包括Nd,Nl和No類別。
  • Pc ==>標點符號,連接器
  • P ==>所有標點符號。這包括Pc,Pd,Ps,Pe,Pi,Pf和Po類別。
  • Sm ==>符號,數學

有例如一些塊(只有一小摘錄):

  • 0000 - 007F ==> IsBasicLatin
  • 0400 - 04FF ==> IsCyrillic
  • 千 - 109F ==> IsMyanmar

什麼我在解決方案中使用:

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

+0

「[\ P {L} \ p {IsBasicLatin}]」是否與非英文非字母匹配?例如其他類型的數字,如?我不認爲這是想要的。似乎他只想匹配基本的ASCII字符。 – Qtax 2013-03-14 15:35:10

+0

當然可以。這是我的理解,只是排除非ASCII字母(並匹配所有其他的Unicode字符)。如果這種理解是錯誤的,那麼解決方案非常簡單,已經在這裏接受了答案,但這是非常基本的正則表達式知識,並不能證明賞金。 – stema 2013-03-14 18:15:57

1

您可以使用正則表達式的屬性上的視圖模型來限制

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

這符合az和AZ怎麼樣0-9和其他字符:/.,;'[]-=等等。 – 2013-03-11 16:33:40

+0

我添加了一個答案,它是否符合您對「*詳細規範答案*」的期望方向 – stema 2013-03-13 07:42:37

0

這可能幫助,沒有有效的方法,但簡單的非REG驗證

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

} 
相關問題