2013-06-05 75 views
1

使用HTML5(或更少使用JavaScript)是否可以將input的最大長度限制爲特定的字節數?將html文本輸入限制爲特定字節數?

我意識到,我可以限制一個字符數有:

<input type="text" maxlength="4" /> 

但是,這還不夠好,因爲我最多可以輸入在它四兩字節的字符。

顯然我正在驗證這個服務器端,但我也想在瀏覽器端。

編輯:爲了清楚起見,我確實希望能夠支持UTF-8。對不起@elclanrs。

+1

客戶方+服務器端AJAX? –

+0

或者,也許只是用'/ [\ w \ s] + /'來限制'keydown'上的字符,它們全部是1byte。 – elclanrs

+0

用戶最多可以輸入四個字符,每個字符在使用UTF-8時可以長達四個字節。我沒有看到這個問題的重點。爲什麼要限制輸入到一定數量的字節?無論如何,數據將被處理爲*字符。 –

回答

1

這個腳本有一個可以清理一對夫婦輕微UX故障,但它確實實現所確定的基本任務,當我在鍍鉻進行了測試:

<input id=myinp /> 


<script> // bind handlers to input: 
    myinp.onkeypress=myinp.onblur=myinp.onpaste= function vld(e){ 
    var inp=e.target; 
    // count bytes used in text: 
    if(encodeURIComponent(inp.value).replace(/%[A-F\d]{2,6}/g, 'U').length > 4){ 
     // if too many bytes, try to reject: 
     e.preventDefault; 
     inp.value=inp.val||inp.value; 
     return false; 
    } 
    // backup last known good value: 
    inp.val=inp.value; 
    } 

</script> 
+0

這看起來不錯,謝謝!據此:http://stackoverflow.com/questions/5290182/how-many-bytes-takes-one-unicode-character對於任何字符,UTF-8最多可以有6個字節。一位同事向我解釋說,這隻適用於一個和兩個字節的字符。你有沒有看到讓它更有效的方法? – meshy

+0

2個字節適合所有主要的網絡語言AFAIK(如果somone有一個,我會愛上一個)。我修改了我的答案以支持6字符轉義代碼,但我認爲4個字符應該足夠用於任何人,但我不是語言學家...... – dandavis

+0

這很容易導致計數不足。對於文本:'我是19個字符文本',此方法計數17個字節,這是不正確的。您可以使用'encodeURIComponent(inp.value.replace(/ \ d/g,'X'))。replace(/%[A-F \ d] {2,6}/g,'U')'。 – jlhonora

0

如果估計不夠好,我會過濾所有非單字節字符並對它們進行計數。