2016-06-08 61 views
2

我試圖防止字符被輸入到文本框中。 問題是,如果您複製並粘貼字符,它會變成正確的單引號,這會在嘗試將文本框保存到數據庫時在sql中導致錯誤。如何防止'字符被輸入到文本框?

您可以在 unicode lookup

在這裏看到這個,如果你手動輸入'那麼它是一個單引號和這個人物被接受。

問題是人們正在將這個角色從電子郵件複製並粘貼到文本框中,並將其轉換爲單引號。

Regex regex = new Regex(@"^[a-zA-Z0-9]*$"); 
Match match = regex.Match(txtName.Text); 
if (!match.Success) 
{ 
    DisplayMsg("Name contains invalid character"); 
} 

有沒有辦法仍然允許用戶輸入撇號,但防止單右引號?

+1

當「常規」撇號沒有時,右撇號如何導致SQL錯誤? –

+0

@DStanley如果您單擊unicode查找的鏈接並輸入'''它將成爲單引號。它只會發生,如果我從例如電子郵件的東西複製撇號。單一的右引號就會導致sql錯誤。 – user123456789

+1

但是一個單撇號的作品?或者你連接字符串和撇號會導致錯誤?如果這是問題,則通過使用參數而不是連接字符串來修復_that_。 –

回答

4

而不是阻止用戶進入(特別是如果他們被複制和粘貼),你會是好自己更換角色,如果你真的需要擺脫它:

txtName.Text = txtName.Text 
    .Replace((char) 0x2018, '\'') // ‘ ‘ 
    .Replace((char) 0x2019, '\'') // ’ ’ 
    .Replace((char) 0x201C, '"') // “ 「 
    .Replace((char) 0x201D, '"'); // ” 」 

這樣,你不會妨礙你的用戶,你仍然會刪除這個角色。

但是,它聽起來像你可能正在建立使用字符串連接的查詢,這是一個更嚴重的問題!

+0

看到評論,看起來OP有一個編碼問題,與輸入或字符串連接無關 –

+0

謝謝你的工作 – user123456789

0

是否有可能只是編碼使用HttpUtility.HtmlEncode("A string with lot's of q'o'u't'e's that should work f'i'n'e'")導致A string with lot's of q'o'u't'e's that should work f'i'n'e' ...

琴絃因爲我不能比我自己的其他任何人的回答進行評論,我也要做這樣的。

從@Richard構建解決方案,它可以讓其他人更容易閱讀,並且在你之後必須遵循。

string someString = "This has a left quote: ’\nThis has a right quote: ‘"; 

string sanitized = someString.Replace(HttpUtility.HtmlDecode("‘"), "'") 
           .Replace(HttpUtility.HtmlDecode("’"), "'"); 
Console.WriteLine(sanitized); 

編輯:誤解了原意。

+0

OP需要將_from_'RIGHT SING_MET引號MARK_ _轉換爲撇號。 –

相關問題