Pergunta

Eu tenho uma página JSP com um pedaço de código de validação de Javascript que limites para uma determinada quantidade de caracteres em enviar. Eu estou usando um <textarea> então não posso simplesmente usar um atributo de comprimento como em um <input type="text">.

Eu uso document.getElementById("text").value.length para obter o comprimento da corda. Estou executando o Firefox 3.0 no Windows (mas eu testei este comportamento com o IE 6 também). O formulário fica submetidos a um servlet J2EE. Na minha Java Servlet o comprimento da corda do parâmetro é maior do que 2000!

Tenho notado que isto pode ser facilmente reproduzida adicionando retornos de carro na <textarea>. Eu usei Firebug para fazer valer o comprimento do <textare> e realmente é de 2000 caracteres. No lado do Java, porém, os retornos de carro são convertidos ao estilo UNIX (\r\n, em vez de \n), assim os difere comprimento do fio!

Estou faltando alguma coisa óbvia aqui ou o quê? Se não, como você de forma confiável (cross-platform / navegador) certificar-se de que o <textarea> é limitado.

Foi útil?

Solução

Isto não é realmente um problema JavaScript (ou Java) - ambas as camadas relatar um comprimento exato para a cadeia eles estão lidando. O problema no seu caso é que a corda se transforma durante a transmissão HTTP.

Se você absolutamente deve garantir que a cadeia não exceda um determinado período, você pode imitar essa transformação no cliente, substituindo todas as instâncias de "\ n" com "\ n \ r" - mas apenas para fins de verificação de comprimento :

textarea.value.replace(/\n/g, "\r\n").length

Outras dicas

Você particularmente cuidados que linha-terminações são usadas? Porque não basta fazer a conversão Java "\ r \ n" para "\ n"? (Note-se que "\ r \ n" é o estilo do Windows;. "\ N" é o estilo Unix)

Como alternativa, fazer o inverso quando verificar o comprimento dentro do JavaScript.

Você está limitando-o para 2000 caracteres por isso se encaixa dentro de uma coluna nvarchar (2000) em um banco de dados? Caso contrário, talvez apenas permitir que uma saturação de 2% a ser flexível no lado do Java.

E Java deve estar usando Unicode UTF16 para representar Strings. Isso /r deve ter conseguido lá em algum outro lugar, talvez uma conversão no navegador da web, aquando da apresentação? Já experimentou diferentes navegadores? Em diferentes plataformas? Você só tem que retirar os /rs.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top