2014-10-27 4 views
2

В любом случае я могу определить кодировку в текстовых областях с помощью HTML и чистого JS?
Я хочу, чтобы они не разрешали специальные символы Юникода (например, ♣ ♦ ♠).
Действительный диапазон символов (для моей цели) - от кодовой точки Юникода U+0000 до U+00FF.
OK, чтобы молча заменить недействительные символы пустой строкой при отправке формы (без предупреждения для пользователя).Определить допустимые символы в текстовых объектах HTML

+0

Просьба уточнить «специальные символы Юникода», которые вы хотите исключить, или указать символы, которые вы хотите принять. Я спрашиваю, потому что: если бы вы (например) использовали атрибут формы 'accept-charset', вы все равно принимали бы символы (из этого набора символов) между 0x7F и 0xFF. Также это повлияло бы на то, как данные будут отправлены на ваш сервер. – GitaarLAB

+0

Это довольно расплывчато ..UTF-8 является * кодировкой * (переменной байтовой длины) Unicode * charset * (из которой вы хотите исключить специальные символы). Пожалуйста, укажите ваши потребности далее: какой символ (s/range (s)) разрешены, какой символ (s/range (s)) разрешен? – GitaarLAB

+0

Хорошо, что очищает необходимый диапазон. Теперь, как вы хотите обрабатывать исключения? (a :) заменить их ничем (пустая строка), пока пользователь вводит текст в текстовое поле (что может привести к тому, что курсор textarea вернется к первой позиции символа textarea) (b :) Предупреждать пользователя во время ввода или отправки (c :) молча заменить незаконных символов при отправке (d :) всплывать экран предупреждения, информирующий пользователя о том, какие символы разрешены (и где) (и дать им возможность их изменить) и т. д. и т. д., смешивать и матч .. Итак, как вы хотите справиться с исключениями? – GitaarLAB

ответ

1

Итак, как вы выяснили в комментариях: вы хотите, чтобы заменить символы, которые Вы сочтете нелегальный с пустыми строками по форме - без предупреждения.

Учитывая следующий пример HTML (содержимое тела):

<form action="demo_form.asp"> 
    First name: <input type="text" name="fname" /><br> 
    Last name: <input type="text" name="lname" /><br> 
    Likes:  <textarea name="txt_a"></textarea><br> 
    Dislikes: <textarea name="txt_b"></textarea><br> 
    <input type="submit" value="Submit"> 
</form> 

Вот основные концепции JavaScript:

function demo(){ 
    for(var elms=this.getElementsByTagName('textarea') 
     ,  L=elms.length 
    ; L-- 
    ; elms[L].value=elms[L].value.replace(/[^\u0000-\u00FF]/g,'') 
    ); 
} 
window.onload=function(){ 
    document.forms[0].onsubmit=demo; //hook form's onsubmit use any method you like 
}; 

Основная идея заключается в том, чтобы заставить регулярок двигатель браузера, чтобы соответствовать на Unicode (а не локальной кодировкой), используя нотацию \uXXXX.
Затем мы просто делаем ряд: [\u0000-\u00FF] и, наконец, указываем, что хотим согласовать по всем снаружи этот диапазон: [^\u0000-\u00FF].
Все, что соответствует этим критериям, будет заменено на '' (пустая строка) при подаче формы. Никакого предупреждения нет ничего.
Вы можете/должны свободно расширять эту концепцию, чтобы включить ее в свой код (таким образом, чтобы он соответствовал вашему кодовому потоку) (и там, где это необходимо, примените его к input type="text" и т. Д.) В зависимости от ваших дальнейших требований.

Это должно вас начать!

EDIT:
Обратите внимание, что текущая спецификация действительна-диапазон (\u0000-\u00FF) будет эффективно Dis-разрешить все такие 'досадные' специальные символы, такие как:

  • фантазии цитаты ‘ ’ “ ”
    (это большой функция для людей, копирующих от слова и т.д.),
  • € ™ Œ œ и т.д.

Но он будет содержать полный блок управления C1 (all 32 control-characters). Однако, с другой стороны, это согласуется с включением полного блока управления C0.
Фактически, это ваш (то, что вы запросили) действительный набор символов: http://en.wikipedia.org/wiki/ISO/IEC_8859-1

Как вы теперь видите, есть еще много чего. Вот почему здравомыслящие приложения (наконец) начинают использовать Unicode (обычно кодируются для Интернета как UTF-8) и просто принимают то, что предоставляют пользователи (в пределах (чрезвычайно четко заданной) причине)!
Большинство общих валидация вопросов (в реальном мире) не более чем средняя школа класс пример концепции о проверке (и даже более важно: чтобы объяснить основы регулярных выражений с что считается легко понятным примером, таким как имя/адрес электронной почты/адрес). К сожалению, они чрезвычайно применяются даже к некоторым государственным системам идентификации (вплоть до паспортов и т. Д.) К именам людей, адресам и т. Д. Фактически: даже полный текущий Юникод не может представлять имя каждого человека (в естественной записи) на планете (что на самом деле все еще жив) !! Пример в реальном мире: попробуйте ввести и покинуть коммерческий рейс, когда ваш посадочный талон имеет разные учетные данные, а затем ваш паспорт (независимо от того, какой из них неверен). «Просто» недостаток умлаута будет проблемой где-то, худшим примером, представьте себе женщину с немецким именем, тайской фамилию и женился на человек с фамилией мандарина ..
Source: xkcd.com/1171/

Наконец: Пожалуйста, понимает, что в большинстве случаев все это упражнение бесполезно (если вы это сделаете без предупреждения), потому что:
вы можете никогда просто признайте, вход на серверной стороне без надлежащей очистки, так что вы уже (без каких-либо знаний пользователя), очищаете свой вход в форму, которая вам нужна (для начинающего программиста (который забывает думать (например) о пользователях с javascript отключен,) это иногда напоминает повторение работы, уже выполненной в javascript на стороне клиента) ...
Обычно, единственное использование , реплицируя поведение на стороне сервера на стороне клиента (обычно используя javascript), так пользователь динамически знает, что будет запрещено сервером (без отправки данных назад и вперед) и может соответствующим образом адаптироваться!

+1

Спасибо за решение, а не только он работает, так как у вас есть какая-то действительно полезная информация. A + ответ! Кроме того, что касается молчаливого удаления, серьезных проблем нет, потому что люди, обращающиеся к нему, имеют в виду то, что разрешено или нет, это просто для того, чтобы нежелательные люди пытались отправить неработающие данные. Еще раз, спасибо! – Heinzen

+0

Спасибо, ты очень рад! Благодарим вас за то, что вы опубликовали четко определенный, но широко применимый вопрос (так это то, что позволило добавить к моему ответу более важную и актуальную информацию (в целом))! – GitaarLAB

0

Вы можете использовать форму атрибут Accept-кодировок

Атрибут Accept-кодировка определяет кодировку символов, которые будут использоваться для отправки формы.

Значение по умолчанию - это зарезервированная строка «UNKNOWN» (указывает, что кодировка равна кодированию документа, содержащего элемент ).

Смотрите эту документацию http://www.w3schools.com/tags/att_form_accept_charset.asp

Я не могу сказать, если это защитит текстовое поле, но по крайней мере он контролирует то, что набор символов, представленный в форме.

На самом деле этот вопрос уже был дан ответ javascript to prevent writing into form elements after n utf 8 characters

+0

Я пробовал использовать метод формы, и это не решает мою проблему. Я не уверен, что я сделал это неправильно, но я все еще получал символы Юникода, которые были отправлены на мой сервер. – Heinzen

+0

Я просто подумал о другом решении, возможно, вы могли бы разместить слушателя на полях. Затем выполните поиск регулярного выражения для символов UTF-8, а затем удалите их? –

+0

UTF-8 символов ??? Да, мы будем делать регулярное выражение что-то на входе, но для этого нам нужно знать допустимые и недопустимые диапазоны, требуемые оператором. – GitaarLAB

0
<!-----This is jquery script which hold to stop special unicode characters. --------> 
<script> 
$("#input-text").keypress(function(e) 
{ 
    var code = e.which || e.keyCode; 
    // 65 - 90 for A-Z and 97 - 122 for a-z 95 for _ 45 for - 46 for . 
    if (!((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code == 95 || code == 46 || code == 45)) 
    { 
     var text = $("#input-text").val(); 
     text = text.substring(0,text.length); 
     $("#input-text").val(text); 
    } 
}); 

</script> 

<!-----This is input text field--------> 
<input id="input-text" name="input-text" type="text" > 
+1

Спасибо за ответ, хотя я ищу чисто JS-решение, поскольку я вообще не использовал jquery в своем проекте. Спасибо за ответ по-прежнему – Heinzen

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