使用HTML5(或更少使用JavaScript)是否可以將input
的最大長度限制爲特定的字節數?將html文本輸入限制爲特定字節數?
我意識到,我可以限制一個字符數有:
<input type="text" maxlength="4" />
但是,這還不夠好,因爲我最多可以輸入在它四兩字節的字符。
顯然我正在驗證這個服務器端,但我也想在瀏覽器端。
編輯:爲了清楚起見,我確實希望能夠支持UTF-8。對不起@elclanrs。
使用HTML5(或更少使用JavaScript)是否可以將input
的最大長度限制爲特定的字節數?將html文本輸入限制爲特定字節數?
我意識到,我可以限制一個字符數有:
<input type="text" maxlength="4" />
但是,這還不夠好,因爲我最多可以輸入在它四兩字節的字符。
顯然我正在驗證這個服務器端,但我也想在瀏覽器端。
編輯:爲了清楚起見,我確實希望能夠支持UTF-8。對不起@elclanrs。
這個腳本有一個可以清理一對夫婦輕微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>
這看起來不錯,謝謝!據此:http://stackoverflow.com/questions/5290182/how-many-bytes-takes-one-unicode-character對於任何字符,UTF-8最多可以有6個字節。一位同事向我解釋說,這隻適用於一個和兩個字節的字符。你有沒有看到讓它更有效的方法? – meshy
2個字節適合所有主要的網絡語言AFAIK(如果somone有一個,我會愛上一個)。我修改了我的答案以支持6字符轉義代碼,但我認爲4個字符應該足夠用於任何人,但我不是語言學家...... – dandavis
這很容易導致計數不足。對於文本:'我是19個字符文本',此方法計數17個字節,這是不正確的。您可以使用'encodeURIComponent(inp.value.replace(/ \ d/g,'X'))。replace(/%[A-F \ d] {2,6}/g,'U')'。 – jlhonora
如果估計不夠好,我會過濾所有非單字節字符並對它們進行計數。
客戶方+服務器端AJAX? –
或者,也許只是用'/ [\ w \ s] + /'來限制'keydown'上的字符,它們全部是1byte。 – elclanrs
用戶最多可以輸入四個字符,每個字符在使用UTF-8時可以長達四個字節。我沒有看到這個問題的重點。爲什麼要限制輸入到一定數量的字節?無論如何,數據將被處理爲*字符。 –