2013-06-05 2 views
1

Использование HTML5 (или, что менее желательно, JavaScript) позволяет ограничить максимальную длину input конкретным количеством байтов?Ограничить ввод текста html в определенное количество байтов?

Я понимаю, что я могу ограничить число символов с:

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

Но это не достаточно хорошо, потому что я могу ввести до четырех два байта символов в нем.

Очевидно, что я проверяю эту серверную сторону, но мне тоже хотелось бы это на стороне браузера.

Редактировать: Чтобы быть ясным, я хочу иметь возможность поддерживать UTF-8. Извините @elclanrs.

+1

+ клиентской стороне сервера AJAX? –

+0

Или, возможно, просто ограничьте символы на 'keydown' чем-то вроде'/[\ w \ s] +/', который будет всего 1 байт. – 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 (мне бы понравилось, если у кого-то есть один). Я изменил свой ответ на поддержку кода с 6-символьными кодами, но я думаю, что 4 символа должно быть достаточно для всех, но я не лингвист .... – dandavis

+0

Это склонно к подсчету. Для текста: «Я текст 19 символов», этот метод насчитывает 17 байт, что неверно. Вы можете использовать 'encodeURIComponent (inp.value.replace (/ \ d/g, 'X')). Вместо этого замените (/% [A-F \ d] {2,6}/g, 'U')'. – jlhonora

0

Если оценка недостаточно, я бы отфильтровал все несимметричные символы и посчитал их.

Смежные вопросы