8
votes

Limiter l'entrée aux nombres et. sur le champ de saisie

Suivre après une autre question que j'ai posée, je n'ai vraiment pas semblé devenir nulle part. En raison de mon ineptie. J'ai choisi les gars-là parce que, il a répondu à ma question.

Je suis rassemblé, je n'ai pas demandé la bonne question parce que je n'ai aucune idée de quoi faire.

Donc, c'est que j'ai un élément de saisie. Garder cela simple; xxx

Je veux que les utilisateurs puissent taper en chiffres uniquement et une seule période (.) N'importe où dans ce prix. Donc pourrait être de 3,00 ou 300,00 ou 3000

Quelqu'un pourrait-il m'aider s'il vous plaît, je vais giggler les yeux.

La question plus ancienne posée était ici Regex rapide avec alerte


6 commentaires

Qu'en est-il de 300. ? Est-ce une entrée valide?


@Anurag oui c'est bien. Nous pouvons éteindre le. Si rien ne suit son côté serveur


est juste un . une entrée acceptable?


@Anurag no. J'y pensais, cette regex (pas que je comprends ou comment implémenter ou la mise en œuvre) pourrait être réglée pour attendre un nombre (nombre min 1) puis toute combinaison d'autres chiffres ou d'une période.


Peut-il être un nombre comme 123,45 ou la pièce après une décimale (si on existe) doit être tous des zéros?


Peut être une combinaison de chiffres avec ou sans point décimal (période pour les Américains) et un seul point décimal, aucun personnage. Donc, des chiffres seulement et une seule période (d'autres mots ne sont pas requis, mais si l'on est dactylographié, plus rien ne peut être saisi)


3 Réponses :


12
votes

Vous pouvez, dans l'événement modifier de l'entrée, vérifiez si le format de numéro est OK. Ce code tentera d'obtenir le numéro et de supprimer quelque chose d'autre: (Je suppose que vous utilisez jQuery, sinon, veuillez le faire) xxx

Voir le fonctionnement ici .

edit : Si vous n'avez pas de jQuery, ce code fait la même chose ( Au moins en chrome): xxx

EDIT 2 : Je ne sais pas si je suis, mais vous pouvez ajouter cela aussi pour empêcher les lettres et les autres caractères < em> avant l'événement modifier : xxx


16 commentaires

J'utilise jQuery et votre exemple ne fonctionne pas pour moi, je peux taper absolument n'importe quoi. ??


Oui, et il ne devrait conserver que le nombre. Regarde mon violon (le lien que j'ai posté)


et regarder ma question (la question que j'ai postée) des chiffres seulement et une seule période


Merci @cambraca Votre deuxième édition, ne donne aucune possibilité de taper.


Je n'aime pas le faire sur l'événement KeyPress, cela pourrait être buggy, mais cela vous permet de taper des chiffres et de la période (au moins dans mon test, Chrome in Win7)


@cambraca: il n'est pas nécessaire de buggy! Le lien que j'ai publié est le navigateur croisé. J'utilise cette technique et il est plus logique que de réinitialiser la valeur après avoir été modifiée. L'approche KeyPress traite de cela avant que la valeur ne change jamais


Salut @cambraca ouais presque là-bas jsfiddle.net/ozzy/nsfbk/2 apparemment je peux ajouter plus d'une période. Je suppose que ça ne l'arrête pas ..


oh et semble avoir besoin d'autoriser le bouton de l'espace de retour lol (et pas plus de deux nombres après une période est entré) Dieu son complexe hein


@cambraca - Vous n'avez pas besoin de tester pour event.keycode ou événement.qui . JQuery Normalise déjà l'objet d'événement pour être croiseur croiseur. Vous pouvez donc toujours obtenir la valeur de event.keycode .


@ 422 - Et pendant que nous sommes dessus. Essayez de coller une valeur indésirable dans la boîte.


@Anurag en fait, j'ai d'abord l'a utilisé uniquement en utilisant uniquement Event.KeyCode , mais cela n'a pas fonctionné dans Firefox.


C'est pourquoi je n'aime pas utiliser l'approche keypress . Cela me nettoyait beaucoup si vous laissez simplement le type d'utilisateur et le filtrer à l'aide de l'événement , comme mes premiers exemples.


@cambraca - Je suis d'accord, il est préférable de laisser les utilisateurs de type sur ce qu'ils veulent et de les avertir simplement si la valeur qu'elles entrait était invalide. J'ai aussi trouvé un lien vers un Question Discuter du manque de JQuery's Manque pour une bonne normalisation .


@cambraca Oui La première approche va bien, mais nous avons affaire à PPL qui ajoutent une publicité et qui entrent dans une valeur pour les biens qu'ils souhaitent vendre. Je voulais juste une méthode en ligne pour restreindre et contrôler les informations de prix.


@ 422 Toute façon que vous le faites (je recommande toujours d'utiliser la première option uniquement), n'oubliez pas de valider sur le serveur. Ces validations JS sont très faciles à tricher.


ok merci je vais faire ça sur le côté du client, il est léger et seulement un idiot de type bugger.it lol



0
votes

Cambraca Aproche Type d'œuvres, mais la meilleure est la dernière approche mentionnée, vous annulez l'événement KeyPress filtrant les clés avant qu'il ne se présente au lieu de défaire ce qui était déjà fait. Une conséquence de la modification de la valeur après le fait que cela puisse affecter la position du caret sur le terrain.

Voici un exemple d'abstraction de l'idée d'une manière transversale. Quelqu'un devrait porter cela à un plug-in jquery http: / /www.qodo.co.uk/assets/files/javascript-Restrict -keyboard-chacreter-input.html P>

OK, je suppose que je vais le porter. Mais je ne suis pas un gars JQuery, il s'agit donc d'une «frappe> non testée Strike> Bare Bones JQuery Plugin qui utilise leur code http://jsfiddle.net/mendesjuan/vnsu7/3 p>

(function( $ ) {
    $.fn.restrict = function(regExp, additionalRestriction) {
        function restrictCharacters(myfield, e, restrictionType) {
            var code = e.which;
            var character = String.fromCharCode(code);
            // if they pressed esc... remove focus from field...
            if (code==27) { this.blur(); return false; }
            // ignore if they are press other keys
            // strange because code: 39 is the down key AND ' key...
            // and DEL also equals .
            if (!e.originalEvent.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) {
                if (character.match(restrictionType)) {
                    return additionalRestriction(myfield.value, character);
                } else {
                    return false;
                }
            }
        }
        this.keypress(function(e){
            if (!restrictCharacters(this, e, regExp)) {
                e.preventDefault();
            }
        });
    };
})( jQuery );

$('#field').restrict(/[0-9\.]/g, function (currentValue, newChar) {
    return !(currentValue.indexOf('.') != -1 && newChar == ".");    
});


2 commentaires

La question se pose encore plusieurs périodes. Plus aucun nombre de chiffres après une période. Cependant, cette approche autorise la clé Supprimer


@ 422: Regardez un coup d'œil. Maintenant, il a un moyen de ne pas autoriser plusieurs périodes et elle est mise en œuvre. Vous pouvez modifier la restriction supplémentaire afin qu'elle n'autorise qu'un certain nombre de chiffres après la période en modifiant le deuxième paramètre à restreindre



1
votes

Voici ma solution (elle valide également les données / valeurs Copie et collées): xxx pré>

Pour l'appliquer à une entrée, procédez comme suit: P>

new InputValidator(document.getElementById('txtValidate'), InputValidator.ValidationType.Custom,'1234abc');


0 commentaires