web-dev-qa-db-fra.com

Comment valider une lettre et un espace blanc uniquement via une expression régulière JavaScript

J'ai un input type="text" pour les noms dans mon code HTML. Je dois m'assurer que c'est une chaîne avec des lettres de "a" à "z" et de "A" à "Z" uniquement, ainsi que des espaces.

Voici mon code HTML:

<form action="" name="f" onsubmit="return f1()">
                Name : <input type="text" name="name">

Je m'attends à ce que mon JavaScript soit quelque chose comme ceci:

function f1() 
{  
   var x=document.f.name.value;  
   ..... 
   ..... 
   return false;
}

PS: Je ne suis pas vraiment familier avec les expressions régulières, alors veuillez mettre une explication avec le code.

11
Zoran777

Vous pouvez utiliser la méthode javascript test() pour valider le champ du nom. La méthode test() teste une correspondance dans une chaîne.

/^[A-Za-z\s]+$/.test(x) //returns true if matched, vaidates for a-z and A-Z and white space

ou

/^[A-Za-z ]+$/.test(x)
21
Konsole

Si vous construisez quelque chose pour les navigateurs modernes, il y a quelque chose de très agréable en HTML5:

<input id="username" name="name" type="text" pattern="[a-zA-Z]{5,}" title="Minimum 5 letters" required />

Référence: types d'entrée de formulaires HTML5

Mise à jour 2017/01/17:

Les anciens navigateurs sont aujourd'hui assez faibles sur les parts de marché. Il s'agit d'une bonne pratique d'utiliser les fonctionnalités HTML5 au lieu des scripts de compatibilité.

10
Frederik.L

consultez les expressions régulières et les modèles.

function f1() 
{  
   var x=document.f.name.value;  
   return /^[A-z ]+$/.test(x);
}
6
twinlakes

Voici un regx plus long. Il recherche de A à Z dans toutes les langues latin etc. Vous pouvez également écrire un trait d'union - trait de soulignement _ point. ainsi que l'espace

var reg =  /^[a-zA-Z._-\s{1}\u00C6\u00D0\u018E\u018F\u0190\u0194\u0132\u014A\u0152\u1E9E\u00DE\u01F7\u021C\u00E6\u00F0\u01DD\u0259\u025B\u0263\u0133\u014B\u0153\u0138\u017F\u00DF\u00FE\u01BF\u021D\u0104\u0181\u00C7\u0110\u018A\u0118\u0126\u012E\u0198\u0141\u00D8\u01A0\u015E\u0218\u0162\u021A\u0166\u0172\u01AFY\u0328\u01B3\u0105\u0253\u00E7\u0111\u0257\u0119\u0127\u012F\u0199\u0142\u00F8\u01A1\u015F\u0219\u0163\u021B\u0167\u0173\u01B0y\u0328\u01B4\u00C1\u00C0\u00C2\u00C4\u01CD\u0102\u0100\u00C3\u00C5\u01FA\u0104\u00C6\u01FC\u01E2\u0181\u0106\u010A\u0108\u010C\u00C7\u010E\u1E0C\u0110\u018A\u00D0\u00C9\u00C8\u0116\u00CA\u00CB\u011A\u0114\u0112\u0118\u1EB8\u018E\u018F\u0190\u0120\u011C\u01E6\u011E\u0122\u0194\u00E1\u00E0\u00E2\u00E4\u01CE\u0103\u0101\u00E3\u00E5\u01FB\u0105\u00E6\u01FD\u01E3\u0253\u0107\u010B\u0109\u010D\u00E7\u010F\u1E0D\u0111\u0257\u00F0\u00E9\u00E8\u0117\u00EA\u00EB\u011B\u0115\u0113\u0119\u1EB9\u01DD\u0259\u025B\u0121\u011D\u01E7\u011F\u0123\u0263\u0124\u1E24\u0126I\u00CD\u00CC\u0130\u00CE\u00CF\u01CF\u012C\u012A\u0128\u012E\u1ECA\u0132\u0134\u0136\u0198\u0139\u013B\u0141\u013D\u013F\u02BCN\u0143N\u0308\u0147\u00D1\u0145\u014A\u00D3\u00D2\u00D4\u00D6\u01D1\u014E\u014C\u00D5\u0150\u1ECC\u00D8\u01FE\u01A0\u0152\u0125\u1E25\u0127\u0131\u00ED\u00ECi\u00EE\u00EF\u01D0\u012D\u012B\u0129\u012F\u1ECB\u0133\u0135\u0137\u0199\u0138\u013A\u013C\u0142\u013E\u0140\u0149\u0144n\u0308\u0148\u00F1\u0146\u014B\u00F3\u00F2\u00F4\u00F6\u01D2\u014F\u014D\u00F5\u0151\u1ECD\u00F8\u01FF\u01A1\u0153\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0218\u1E62\u1E9E\u0164\u0162\u1E6C\u0166\u00DE\u00DA\u00D9\u00DB\u00DC\u01D3\u016C\u016A\u0168\u0170\u016E\u0172\u1EE4\u01AF\u1E82\u1E80\u0174\u1E84\u01F7\u00DD\u1EF2\u0176\u0178\u0232\u1EF8\u01B3\u0179\u017B\u017D\u1E92\u0155\u0159\u0157\u017F\u015B\u015D\u0161\u015F\u0219\u1E63\u00DF\u0165\u0163\u1E6D\u0167\u00FE\u00FA\u00F9\u00FB\u00FC\u01D4\u016D\u016B\u0169\u0171\u016F\u0173\u1EE5\u01B0\u1E83\u1E81\u0175\u1E85\u01BF\u00FD\u1EF3\u0177\u00FF\u0233\u1EF9\u01B4\u017A\u017C\u017E\u1E93]+$/;
                    return reg.test(val);
5
Johansrk

/^[A-Z ]+$/i.test(x) fait l'affaire selon vos spécifications, mais si j'étais vous, j'ajouterais des tirets, c'est-à-dire /^[-A-Z ]+$/i.test(x), parce que noms à double canon sont assez commun. Bien sûr, je suggérerais de revoir cela plus tard une fois que JS aura pris en charge la détection de mots Unicode dans son RegExp pour prendre en charge encore plus de noms.

EDIT: En fait, si vous voulez vous assurer que le nom n'est pas mal formé, par exemple il y a au moins le prénom et le nom et il n'y a pas d'espaces supplémentaires, vous pouvez faire quelque chose comme ceci: /^(?:[-A-Z]+ )+[-A-Z]+$/i.test(x). Je viens également de me rappeler que vous souhaiterez peut-être également inclure des points, par exemple "Henry Jr. Jones". Combiné au précédent, ce serait: /^(?:[-A-Z]+\.? )+[-A-Z]+$/i.test(x).

1
quinnirill
 <!--For Character in Textbox Script -->
    <script type="text/javascript">
        function isAlfa(evt) {
            evt = (evt) ? evt : window.event;
            var charCode = (evt.which) ? evt.which : evt.keyCode;
            if (charCode > 32 && (charCode < 65 || charCode > 90) && (charCode < 97 || charCode > 122)) {
                return false;
            }
            return true;
        }

        function toTitleCase(str) {
            return str.replace(/\w\S*/g, function (txt) {
                return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
            });
        }


    </script>
    <!--For Character in Textbox Script -->
0
JIYAUL MUSTAPHA