Question

Je veux faire correspondre une chaîne pour vous assurer qu'il ne contient que des lettres.

J'ai cela et il fonctionne très bien:

var onlyLetters = /^[a-zA-Z]*$/.test(myString);

et

Depuis que je parle une autre langue aussi, je dois permettre à toutes les lettres, non seulement A-Z. En outre, par exemple:

é ü ö ê å ø

personne ne sait s'il y a un terme global 'alpha' qui comprend toutes les lettres à utiliser avec RegExp? Ou mieux encore, quelqu'un at-il une sorte de solution?

Merci beaucoup

EDIT: Juste rendus compte que vous pourriez veux aussi permettre « - » et « » d'Incase un double nom comme: « Mary-Ann » ou « Mary Ann »

Était-ce utile?

La solution

Je ne sais pas la raison réelle pour ce faire, mais si vous voulez l'utiliser comme pré-vérifier pour, par exemple, les noms de connexion oder surnoms utilisateurs, je vous suggère de saisir les caractères vous et ne pas utiliser l'ensemble des caractères « alpha » vous trouverez dans unicode, parce que vous ne trouverez probablement pas une différence optique dans les lettres suivantes:

А ≠ A ≠ Α  # cyrillic, latin, greek

Dans de tels cas, il est préférable de spécifier les lettres manuellement si vous permis souhaitez minimiser compte trucage et tel.

Addition

Eh bien, si elle est un champ qui est censé être non unique, je suis d'grec aussi bien. Je ne me sentirais pas bien quand je force les utilisateurs à changer leur nom à une version latinisé.

Mais pour les champs uniques comme des surnoms dont vous avez besoin pour donner à vos autres visiteurs du site un indice, que c'est vraiment le surnom qu'ils pensent qu'il est. assez mauvais que les gens faux comptes avec interchanger I et l déjà. Bien sûr, il est quelque chose qui dépend de vos utilisateurs; mais pour être sûr que je pense qu'il est préférable de permettre que de base diacritiques latin + de. (Ont Peut-être un coup d'œil à cette liste: latine-derived_alphabet)

En tant que suggestion non testé (avec « - », « _ » et « »):

/^[a-zA-Z\-_ ’'‘ÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ]$/.test(myString)

Une autre édition: J'ai ajouté pour les personnes lapostrophe avec des noms comme O'Neill ou O'Reilly. (Et la droite et l'inverse pour les personnes apostrophes qui ne peuvent pas entrer dans la frisée un correctement.)

Autres conseils

var onlyLetters = /^[a-zA-Z\u00C0-\u00ff]+$/.test(myString)

Vous ne pouvez pas le faire en JS. Il a une très regex limitée et le soutien normalisateur. Vous auriez besoin de construire un tableau de caractères long et difficile à maintenir avec tous les caractères possibles latin avec des signes diacritiques (je suppose qu'il ya environ 500 différents). déléguer plutôt la tâche de validation du côté serveur qui utilise une autre langue avec capabilties plus regex, si nécessaire avec l'aide de ajax.

Dans un environnement regex à part entière, vous pouvez simplement tester si la chaîne correspond \p{L}+. Voici un :

boolean valid = string.matches("\\p{L}+");

Vous pouvez également normailze le texte pour se débarrasser des signes diacritiques et vérifier si elle contient [A-Za-z]+ seulement. Voici encore un :

string = Normalizer.normalize(string, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
boolean valid = string.matches("[A-Za-z]+");

PHP supporte des fonctions similaires.

Quand j'ai essayé de mettre en œuvre @ JavaScript solution de Debilski n'a pas aimé les caractères latins étendus - je devais les coder en JavaScript échappe:

// The huge unicode escape string is equal to ÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦ
// ĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎ
// ƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊ
// IJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñ
// ņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭ
// ŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ

function isAlpha(string) {
    var patt = /^[a-zA-Z\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 patt.test(string);
}

Cela peut être difficile, malheureusement JavaScript supporte assez pauvre pour l'internationalisation. Pour effectuer cette vérification, vous devrez créer votre propre classe de caractères. En effet, par exemple, \w est le même que [0-9A-Z_a-z] qui ne vous aidera pas beaucoup et il n'y a rien comme [[:alpha:]] en Javascript. Mais comme il semble que vous allez seulement utiliser un autre langauge vous pouvez probablement ajouter ces autres personnages dans votre classe de personnage.

Par ailleurs, je pense que vous aurez besoin d'un ? ou * dans votre regexp s'il myString peut être plus d'un caractère.

L'exemple complet,

/^[a-zA-Zéüöêåø]*$/.test(myString);

Il devrait y avoir, mais que l'expression rationnelle dépendra la localisation. Ainsi, é ü ö ê å ø ne sera pas filtré si vous êtes sur une localisation américaine, par exemple. Pour vous assurer que votre site Web fait ce que vous voulez dans toutes les localisations, vous devez écrire explicitement les caractères sous une forme similaire à ce que vous faites déjà.

La seule norme que je suis au courant de bien est \w, ce qui correspondrait à tous les caractères alphanumériques. Vous pouvez le faire de la façon « standard » en exécutant deux regex, un pour vérifier les matches de \w et un autre pour vérifier que \d (tous les chiffres) ne correspond pas, ce qui se traduirait par une chaîne alpha seule garantie. Encore une fois, je vous conseille vivement de ne pas utiliser cette technique car il n'y a aucune garantie que \w représentera dans une localisation donnée, mais cela ne répond à votre question.

Je ne sais pas quoi que ce soit au sujet de Javascript, mais si elle a un soutien approprié unicode, convertir votre chaîne en forme décomposées, puis retirez les diacritiques de celui-ci ([\u0300-\u036f\u1dc0-\u1dff]). Ensuite, vos lettres ne seront les ASCII.

Vous pouvez toujours utiliser une liste noire au lieu d'une liste blanche. De cette façon, vous ne supprimez les caractères que vous n'avez pas besoin.

Vous pouvez utiliser une liste noire -. Une liste de caractères à exclure

En outre, il est important de vérifier l'entrée sur le côté serveur, non seulement côté client! Côté client peut être facilement contournée.

Il y a quelques raccourcis pour cela dans d'autres ACHIVE dialectes d'expression régulière - voir cette page . Mais je ne crois pas qu'il y ait les standards en JavaScript -. Certainement pas qu'appuierait par tous les navigateurs

J'utilise un convertisseur avant de vérifier, mais il est toujours pas facile pour toutes les langues. Je ne suis pas sûr que ce soit possible.

function noExtendedChars( input_name ){

    var whitelist = [
        ['a',  'à','á','â','ä','æ','ã','å','ā'],
        ['c',  'ç', 'ć', 'č'],
        ['e',  'è','é','ê','ë','ē','ė','ę'],
        ['i',  'ï','ï','í','ī','į','î'],
        ['l',  'ł'],
        ['n',  'ñ', 'ń'],
        ['o',  'ô', 'ö', 'ò', 'ó', 'œ', 'ø', 'ō', 'õ' ],
        ['s',  'ß', 'ś', 'š' ],
        ['u',  'û', 'ü', 'ù', 'ú', 'ū'],
        ['y',  'ÿ'],
        ['z',  'ž', 'ź', 'ż']
        ];

    for( b=0; b < blacklist.length; b++ ){
        var r=  blacklist[b];
        for ( a=1; a < r.length; a++ ){
            input_name = input_name.replace( new RegExp( r[a], "gi") , r[0]);
        }
    }
    return input_name;

}
var regexp = /\B\#[a-zA-Z\x7f-\xff]+/g; 
var result = searchText.match(regexp);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top