我在我的應用程序中使用Facebook API執行用戶身份驗證,然後將用戶數據保存到數據庫中。我使用相同的(即臉書)用戶名爲我的應用程序,如果它存在,否則我使用名稱創建用戶名,但問題是某些用戶沒有他們的英文顯示名稱。那麼如何在服務器端檢查這種輸入?如何檢查用戶輸入的數據是否使用英語以外的語言?
我的應用程序是用Asp.net編寫的。
我在我的應用程序中使用Facebook API執行用戶身份驗證,然後將用戶數據保存到數據庫中。我使用相同的(即臉書)用戶名爲我的應用程序,如果它存在,否則我使用名稱創建用戶名,但問題是某些用戶沒有他們的英文顯示名稱。那麼如何在服務器端檢查這種輸入?如何檢查用戶輸入的數據是否使用英語以外的語言?
我的應用程序是用Asp.net編寫的。
您可以使用正則表達式來檢查,如果角色僅a, b, c...z
或A, B, C...Z
:
using System.Text.RegularExpressions;
Regex rgx = new Regex("^[a-zA-Z]+$");
if (rgx.IsMatch(inputData))
// input data is in English alphabet; take appropriate action...
else
// input data is not in English alphabet; take appropriate action...
英語不允許標點符號嗎?只是不要這樣做! – 2012-01-03 14:07:31
@JuicyScripter:用戶名通常不包含標點符號,甚至不用英文:p – 2012-01-03 15:18:47
@Razvan即使我們談論Facebook的'用戶名',它也允許在其中使用'.'。 – 2012-01-03 15:28:10
這可能是矯枉過正這個任務,但檢測輸入語言正確的方法是使用類似Extended Linguistic Services APIs或服務,如Free Language Detection API
在你的情況我建議在適當的編碼保存的用戶名(如utf-8
或utf-16
,這應該是罰款,在Facebook上的用戶名)
你的問題不是用戶名是用外語,而是你試圖將數據存儲到數據庫中,而不使用適當的字符編碼(我見過???
的唯一原因是字符編碼是目前的問題至少有一個級別太低)。
在最低,你應該使用utf-8
,但你可能想使用utf-16
(甚至utf-32
如果你是真正的保守)。我也推薦這個mandatory reading。
確定用戶名是否是英文是不可能的。專有名詞上有太多可能的變體可以提供任何可靠的度量。然後是移植的名字等。您可以嘗試檢測是否有非ASCII字符(我認爲/[^ -~]/
應該匹配所有這些字符—空格是ASCII中最低的「可鍵入」字符,〜是最高的字符),但是您補償的是unicode問題,而不是讓計算機適度地處理。
這是什麼問題引起的? – shrutyzet 2012-01-03 11:36:22
@shrutyzet現在我們只允許使用英文用戶名,所以當我嘗試創建用戶名並將其保存在數據庫中時,它就像這樣保存下來。?????。????。????? – 2012-01-03 11:46:50
這可能是一個與數據庫字符集有關的問題? – fcalderan 2012-01-03 14:43:15