2017-08-11 1 views
0

J'ai ceci:Participera accepter une lettre avec regex et jQuery

$('.onealphaonly').bind('keyup blur',function(){ 
    var node = $(this); 
    node.val(node.val().replace(/[^a-zA-Z]/g{1},'')); } 
); 

où ce que j'espère que ce serait faire est qu'il permet à l'utilisateur d'entrer une seule lettre dans un champ de saisie. Il n'accepte que des lettres pour l'instant, mais je ne peux pas le faire pour permettre une seule lettre (et j'ai cherché des dizaines de réponses SO). Des idées?

Live demo

+0

aussi 'maxlength = 1' –

+1

@DimitarChristoff Je pense que cela pourrait être affiché comme une réponse. =) – gsamaras

Répondre

1

capture la première lettre de l'entrée et de remplacer tout par sa valeur.

$('.onealphaonly').bind('keyup', function() { 
 
    const node = $(this); 
 
    node.val(node.val().replace(/^([a-zA-Z]).*/g, '$1')); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input class="onealphaonly"/>

+0

Regex101 dit: '{1} Quantifier - Correspond exactement à une fois (quantificateur dénué de sens)'. – gsamaras

+1

@gsamaras Vous avez raison, le '{1}' est complètement inutile, désolé à ce sujet. Post édité :) – Erazihel

+0

Merci Erazihel. Pensez-vous que ma question était si mauvaise d'obtenir une downvote? – gsamaras

1

Vous avez une erreur de syntaxe dans votre regex. Il doit être au format /pattern/flags. Voici une regex qui fonctionne: node.val().replace(/^([a-zA-Z])[a-zA-Z]+/g, '$1'). Il y a plusieurs façons d'élaboration d'une expression régulière qui va faire le travail, mais pourquoi ne pas utiliser les éléments suivants à la place:

node.val().substr(0, 1); 

En outre, vous pouvez avoir plus de succès en vérifiant aussi si la longueur de la valeur est supérieur à un et en utilisant e.preventDefault() comme ceci:

if (node.val().length >= 1) { 
    e.preventDefault(); 
    return false; 
} 

Fiddle: http://jsfiddle.net/ka52kdLv/14/

+0

Merci Adam pour la réponse et l'upvote! – gsamaras