2012-08-13 20 views
10

Tengo un campo de texto de entrada con una longitud máxima de 10. El campo es para números de teléfono australianos (10 dígitos). Los números de teléfono son generalmente divididos en la siguiente sintaxisJavascript - Eliminar espacios en pegar

12 12345678 

Si alguien copia lo anterior y pastas que en mi campo de entrada, es obvio que deja el último dígito y mantiene el espacio.

¿Hay alguna manera de eliminar espacios justo antes de pegarlos en el cuadro de entrada? ¿O hay otro trabajo alrededor?

Gracias de antemano.

Respuesta

8

Esto debería funcionar para usted:

HTML

<input type="text" id="phone" maxlength="10" />​ 

JavaScript

var phone = document.getElementById('phone'), 
    cleanPhoneNumber; 

cleanPhoneNumber= function(e) { 
    e.preventDefault(); 
    var pastedText = ''; 
    if (window.clipboardData && window.clipboardData.getData) { // IE 
     pastedText = window.clipboardData.getData('Text'); 
     } else if (e.clipboardData && e.clipboardData.getData) { 
     pastedText = e.clipboardData.getData('text/plain'); 
     } 
    this.value = pastedText.replace(/\D/g, ''); 
}; 

phone.onpaste = cleanPhoneNumber; 

violín: http://jsfiddle.net/y6TYp/6/

actualización nnnnnn tenía un gran punto con respecto a los números de teléfono de Australia, la actualización de reemplazar expresiones regulares.

+0

Bravo, bravo, bien hecho. Gracias; Funciona de maravilla. – Matt

+2

Es posible que también desee eliminar los paréntesis y los guiones, ya que los números de teléfono de Australia a menudo se escriben con alguna variación en '(02) 6543-2109'. Así que tal vez '.replace (/ \ D/g, '')' (es decir, reemplace cualquier no dígito con cadena vacía). – nnnnnn

+0

También estaba buscando una solución de navegador cruzado. Esto ciertamente funciona en Chrome e IE9. Sin embargo, esto no parece funcionar en Firefox. En MDN, en la sección de notas: "Actualmente no hay forma de DOM para obtener el texto que se está pegando, tendrás que usar un nsIClipboard para obtener esa información". – JayC

1

Esta función le ayudará a hacerlo:

function removeSpaces(string) { 
return string.split(' ').join(''); 
} 

Alternativamente, usando jQuery, se puede utilizar el método descrito aquí: Delete white spaces in textbox when copy pasted with jquery

+0

gracias por la respuesta . Desafortunadamente, estas no parecen ser soluciones viables cuando se establece maxlength. Intente pegar el siguiente "12 12345678" en el jsfiddle que hice: http://jsfiddle.net/xNdDM/1/ – Matt

1

abordar la tarea que ha descrito usted quiere asegurarse de que su código funciona en diferentes navegadores con o sin javascript así que hacer lo siguiente:

  1. Establecer la maxlength a 11 - maxlength es un atributo HTML y debe asegurarse de que con o sin javascript los datos ingresados ​​por el usuario no se pierdan. Si el usuario ingresa 11 dígitos y no hay javascript, deberá capturar los datos y limpiarlos desde el servidor. Bueno, la validación del lado del servidor es obligatoria.

  2. Si el javascript está allí, usaría la función jquery para establecer la duración máxima y asegurarme de que los espacios se eliminan, por ejemplo, si tiene un campo con ID = 'título': en el documento listo, escriba el siguiente código: ..

    $ ('# entrada de título') attr ('maxLength', '10') pulsación de tecla (limitMe);

    function limitMe(e) { 
        if (e.keyCode == 32) { return true; } 
        return this.value.length < $(this).attr("maxLength"); 
    } 
    

Obviamente, si usted tiene numerosos campos que acaba de decorar todo de los campos de entrada con el mismo atributo de clase y luego aplicarlo a todos los campos de este modo:

$('input.limited').attr('maxLength','10').keypress(limitMe); 
Cuestiones relacionadas