2010-07-22 7 views
4

Je ne veux pas l'utilisateur pour permettre le collage de tous les caractères non alphanumériques sur une zone de texte. Comment puis-je limiter cela en Javascript? Merci!Ne laissez pas coller des caractères non alphanumériques

+3

Peu importe ce que vous essayez de restreindre avec Javascript, je peux facilement le contourner. Vous aurez besoin d'une validation côté serveur, quoi qu'il arrive. –

+1

Pour les champs tels que les numéros de téléphone, les numéros de cartes de crédit, etc. Je vous recommande de laisser l'utilisateur entrer ce qu'il veut et d'effacer ensuite les caractères non alphanumériques sur le serveur. Vous pourriez alors vouloir stocker les deux versions, ainsi l'original peut être montré à l'utilisateur plus tard, et la version dépouillée est indexée, envoyée aux API, etc. Rien n'est plus ennuyant qu'un formulaire qui impose un format inutile. – devstuff

Répondre

2

Vous pouvez utiliser l'événement onblur de zone de texte.

function remove() 
{ 
    var otxt=document.getElementById('txt1'); 

var val=otxt.value; 

for(i=0;i<val.length;i++) 
    { 
    var code=val.charCodeAt(i); 
    if(!(code>=65 && code<=91) && !(code >=97 && code<=121) && !(code>=48 && code<=57)) 
     { otxt.value=""; return ; }  

    } 
} 


<input type="text" id="txt1" onblur="remove();" /> 

Il supprimera toute valeur de la zone de texte lorsque vous saisissez une valeur non alphanumérique.

+0

Je pense que ONBlur est seulement pour IE. Comment faire pour que cette fonction fonctionne pour plusieurs navigateurs? – user228777

+0

@ user228777: en utilisant une librairie comme prototype ou jQuery, vous pouvez 'observer 'l'événement' blur', cela fonctionnera dans plusieurs navigateurs. – Josh

+0

@ user228777 'onblur' est standard. Et pourquoi tu ne l'essaies pas ?! Il est assez ridicule pour vous de venir ici pour obtenir de l'aide, puis d'ignorer les bonnes suggestions basées sur des hypothèses incorrectes. –

0

Je ne sais pas comment vous pouvez empêcher le collage, mais vous pouvez filtrer le contenu soit sur le soumettre ou sur l'événement de changement.

+0

Si l'utilisateur colle des caractères non valides, puis-je définir la valeur de la zone de texte = "" lors d'un événement de modification? comment ferais-je cela? – user228777

0

Il est préférable de valider le formulaire - vérifiez le plugin de ce grand jQuery - http://docs.jquery.com/Plugins/Validation/ et vous pouvez utiliser la règle du "nombre": http://docs.jquery.com/Plugins/Validation/Methods/number. Vraiment simple et facile à régler!

+0

Rappelez-vous: vous ne devriez considérer le plugin de validation jQuery que comme une optimisation des performances. Il peut fournir un retour d'informations plus rapide pour l'utilisateur et éviter d'envoyer de mauvaises requêtes à votre serveur, mais c'est finalement à votre serveur de valider les données. –

7

En utilisant jQuery, c'est une façon de le faire:

HTML:

​<form name='theform' id='theform' action=''> 
<textarea id='nonumbers' cols='60' rows='10'> </textarea> 
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

JavaScript:

$().ready(function(){ 
    $("textarea#nonumbers").keyup(removeextra).blur(removeextra); 
}); 
function removeextra() { 
    var initVal = $(this).val(); 
    outputVal = initVal.replace(/[^0-9a-zA-Z]/g,"");  
    if (initVal != outputVal) { 
     $(this).val(outputVal); 
    } 
}; 

Try it out here.

EDIT: Comme le fait remarquer dans les commentaires, l'original (en utilisant l'événement .keyup()) aurait laissé ouverte la possibilité de coller via le menu contextuel de la souris, j'ai donc ajouté un événement .blur(). .change() aurait été possible aussi, mais il y a des rapports de bugginess. Une autre option utilise .focusout(). Le temps d'expérimenter ...

+0

Désolé, Jquery n'est pas l'option pour moi. Le patron ne veut pas utiliser Jquery. Je fais la validation côté serveur avec le validateur .net personnalisé. Mais j'essayais de le restreindre en utilisant javascript. – user228777

+0

Eh bien, il n'est pas difficile de réécrire sans les fonctions de la bibliothèque, mais vous devrez faire vos propres tests et effectuer le nettoyage de votre navigateur. Mais ayant besoin de demander, est-ce censé fonctionner quelque part qui n'a pas accès au Web? Parce qu'avec Google et d'autres (je pense) l'hébergeant, il n'est pas nécessaire de l'héberger sur ses propres machines après tout. – chryss

+0

@ user228777 - jQuery n'est pas une option, mais vous avez * tagué * la question avec 'jquery'!? –

0

En supposant:

<textarea id="t1"/> 

Vous pouvez modifier le gestionnaire d'événements onchange pour le textarea de dépouiller quoi que ce soit non alphanumérique:

document.getElementById('t1').onchange = function() { 
    this.value = this.value.replace(/\W/,''); 
} 
0

Pourquoi ne l'a suggéré d'utiliser OnPaste événement? Cela est entièrement pris en charge dans IE, Safari et Chrome.

Docs for using OnPaste in IE

Docs for using OnPaste in Webkit

En JQuery, qui ressemblerait à ceci:

$(input).bind("paste", function(e){ RemoveNonAlphaNumeric(); }) 

qui couvre 75% du marché des navigateurs.

Si vous utilisez JQuery, onpaste est normalisé automatiquement dans Firefox pour que cela fonctionne aussi. Si vous ne pouvez pas utiliser JQuery, un événement OnInput fonctionne.

La solution de travail est d'utiliser une valeur setTimeout rapide pour permettre à remplir la propriété de la valeur de l'entrée.

Fondamentalement comme ceci:

$("input").bind("paste", function(e){RemoveAlphaChars(this, e);}); 

function RemoveAlphaChars(txt, e) 
{ 
    setTimeout(function() 
    { 
     var initVal = $(txt).val(); 

     outputVal = initVal.replace(/[^0-9]/g,""); 

     if (initVal != outputVal) 
      $(txt).val(outputVal); 
    },1); 
} 

J'ai testé dans IE, Chrome et Firefox et il fonctionne bien. Le délai d'expiration est si rapide que vous ne pouvez même pas voir les caractères supprimés.

Questions connexes