2010-09-18 78 views
0

我剛剛開發了一個簡單的asp.net mvc應用程序項目,僅用於英語。我想阻止用戶輸入英語以外的語言。是否有可能知道當用戶在文本框或編輯器上寫入某些內容時用戶是否輸入了其他語言以提供彈出消息?字符/語言

+3

那麼,英文中引用我的名字的文本將被禁止? – 2010-09-18 19:36:55

+0

不,那不是我的目的。我想在網站上使用英語作爲官方語言,因爲我們公司有許多不同的人說不同的語言。名字就像你的將被接受。 – Hoorayo 2010-09-18 19:57:57

+0

你打算檢查/過濾/傾斜西里爾文,希伯來文,波斯文,阿拉伯文,普通話等的字符? – 2010-09-19 00:14:25

回答

3

你可以限制輸入框拉丁字符,但沒有自動的方法,如果用戶輸入中說一些英語,芬蘭語或挪威。他們大都使用a-z。 a-z以外的任何字符都可以給你一個指示,但某些口音也需要用英語來表示,所以它不是100%。

Google Translate公開了一個JavaScript API來檢測文本的語言。

0

檢查拉美26

如果你想確保任何非英文字母被提交,你可以簡單地驗證他們屬於A-Z,A-Z,0-9和正常標點範圍之外。這聽起來像你想要檢測並拒絕普通的非拉丁字符。

檢測用戶的操作系統設置,鍵盤設置不是最好的方式,因爲用戶可以連接多個鍵盤,並使用複製/粘貼。

UI驗證

在用戶界面級別,你可以創建一個jQuery的方法,將檢查一個文本框的值比你的可接受範圍以外的值。也許這就是A-Z,a-z和數字。你可以在事件onBlur上做到這一點。請記住,你可能要允許'.

$('#customerName').blur(function() { 
    var isAlphaNumeric; 
    //implementation of checking a-z, A-Z, 0-9, etc. 
    alert(isAlphaNumeric); 
}); 

控制器驗證

如果你想在控制器級別,也能實現這一點,你可以對輸入值運行正則表達式。

public ActionMethod CreateCustomer(string custName) 
{ 
    if (IsAcceptableRange(custName)) 
    { 
     //continue 
    } 
} 

public bool IsAcceptableRange(string input) 
{ 
    //whitelist all the valid inputs here. be sure to include 
    //space, period, apostrophe, hypen, etc 
    Regex alphaNumericPattern=new Regex("[^a-zA-Z0-9]"); 
    return !alphaNumericPattern.IsMatch(input); 
} 
+1

它不會識別語言,只是您輸入的英文字母中的字符也是許多其他語言共享的字符。 – 2010-09-18 19:39:42

+0

@Mikael:同意。斯文,吉爾斯等將通過這項測試。它只會過濾掉非拉丁文的26個字符。 – 2010-09-18 19:44:48

+0

這意味着我無法輸入標點符號?甚至空間? – 2010-09-18 20:28:00

0

有兩個測試你可以做。一個是找出CultureInfo的設置用戶的機器上:

http://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture.aspx

這會給你他們目前的文化背景,這是一個開始。當然,你可以有你的設置爲「英語」,但俄羅斯依然打字,大部分信件是一樣的..

所以下一步是使用此發現的語言:http://www.google.com/uds/samples/language/detect.html

根據在線討論,這不是最大的,但它是一個開始的地方。不過,我確信那裏有更好的自然語言標識符。

3

使用下面的代碼:

<p>Note that this community uses the English language exclusively, so please be 
considerate and write your posts in English. Thank you!</p> 
+0

我同意你的意見。這是我要做的第一件事,但不幸的是用戶從來不會注意閱讀這種警告。 – Hoorayo 2010-09-18 19:48:22

+1

@Hoorayo:StackOverflow沒有這樣的警告(或者如果是這樣,它從來沒有引起我的注意),但大多數(如果不是全部)問題和答案都是英文的。所以,它可以沒有工作。你只需要弄清楚如何。 :-) – dtb 2010-09-18 20:27:49

0

谷歌翻譯被引述在兩個答案,但我想補充一點,的Microsoft Word API也可以用於檢測語言,就像字確實爲拼寫檢查。

這肯定不是最好的解決方案,因爲Microsoft Office的語言檢測功能不能很好地工作(恕我直言),但如果在每個發佈的消息上向Google或其他遠程服務發出網絡請求不是很好一個辦法。

另外,通過Microsoft Word API檢查拼寫也可能有用。如果一封郵件在用英文檢查時有大量拼寫錯誤的單詞,可能是因爲郵件是用另一種語言編寫的(或者郵件的編寫者寫得太糟糕了)。

最後,我完全同意Matti Virkkunen。最好的,也許唯一的方法來確保消息將用英文寫成要求用戶用英文寫作。否則,它與實施obscenity filters一樣糟糕。