Domanda

Voglio trovare una stringa per assicurarsi che contenga solo lettere.

Io ho questo e funziona bene:

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

MA

Dal momento che parlo un'altra lingua troppo, ho bisogno di permettere a tutte le lettere, non solo A-Z.Anche, per esempio:

é ü ö ê å ø

qualcuno sa se c'è un mondiale 'alpha' termine che comprende tutte le lettere da utilizzare con regExp?O meglio ancora, qualcuno ha qualche tipo di soluzione?

Grazie mille

EDIT: Appena realizzato che si potrebbe anche wanna consentire '-' e ' - ' in caso di doppio nome come:"Mary-Ann" o "Mary Ann"

È stato utile?

Soluzione

Non so il vero motivo per fare questo, ma se si desidera utilizzarlo come un pre-controllo, per esempio, i nomi di login oder utente nickname, vi suggerisco di inserire tutti i caratteri di te e di non utilizzare tutto il ‘alfa’ personaggi si trovano in unicode, perché probabilmente non si troverà un'ottica differenza nei seguenti lettere:

А ≠ A ≠ Α  # cyrillic, latin, greek

In questi casi è meglio specificare il permesso lettere manualmente se si desidera ridurre al minimo conto di fingere e ad.

Oltre

Beh, se è per un campo che dovrebbe essere non unico, mi permetterebbe greco, come bene.Non mi sento bene quando cerco di forzare gli utenti a cambiare il loro nome a una versione latinizzata.

Ma per campi univoci come nickname è necessario dare il tuo gli altri visitatori del sito un suggerimento, che è davvero il soprannome che pensare.Abbastanza brutto che la gente account falsi con scambiando I e l già.Naturalmente, è qualcosa che dipende dal tuo blog;ma per essere certi che penso sia meglio per consentire latino di base + segni diacritici solo.(Forse dare un'occhiata a questa lista: Latina-derived_alphabet)

Come non testati suggerimento (con ‘-’, ‘_’ e‘ -’):

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

Un'altra modifica: Ho aggiunto l'apostrofo per persone con nomi come O'Neill o O'Reilly.(E il diritto e l'inversione dell'apostrofo per le persone che non possono partecipare ricci uno correttamente.)

Altri suggerimenti

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

Non si può fare questo in JS. Ha un supporto regex e normalizzatore molto limitato. Si avrebbe bisogno di costruire un array di caratteri lungo e impossibile da mantenere con tutti possibili caratteri latini con segni diacritici (Credo che ci sono circa 500 tipi diversi). Piuttosto delegare l'attività di convalida per il lato server che usa un altro linguaggio con capabilties più regex, se necessario con l'aiuto di Ajax.

In un ambiente pieno titolo regex si può solo verificare se la stringa corrisponde \p{L}+. Ecco un esempio Java :

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

In alternativa, si potrebbe anche normailze il testo per sbarazzarsi dei segni diacritici e verificare se contiene solo [A-Za-z]+. Ecco di nuovo un esempio Java :

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

Il PHP supporta funzioni simili.

Quando ho cercato di implementare la soluzione di @ Debilski JavaScript non amava i caratteri latini estesi - ho dovuto codificare loro come sfugge JavaScript:

// 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);
}

Questo può essere difficile, purtroppo JavaScript ha il supporto piuttosto scarsa per l'internazionalizzazione. Per fare questo controllo si dovrà creare il proprio personaggio di classe. Questo perché, per esempio, \w è la stessa [0-9A-Z_a-z] che non vi aiuterà molto e non v'è nulla di simile [[:alpha:]] in Javascript. Ma dal momento che suona come si sta solo andando a utilizzare un altro langauge probabilmente si può solo aggiungere questi altri personaggi nella vostra classe di caratteri.

A proposito, credo che avrete bisogno di un ? o * nella vostra espressione regolare là se myString può essere più lungo di un carattere.

L'esempio completo,

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

Non ci dovrebbe essere, ma l'espressione regolare sarà localizzazione dipendente. Così, é ü ö ê å ø non sarà filtrato, se siete su una localizzazione degli Stati Uniti, per esempio. Per assicurare il vostro sito web fa ciò che si desidera in tutte le localizzazioni, si dovrebbe esplicitamente scrivere i caratteri in una forma simile a quello che si sta già facendo.

Il solo standard sono a conoscenza è però \w, che dovrebbe corrispondere tutti i caratteri alfanumerici. Si potrebbe farlo nel modo "standard" mediante l'esecuzione di due espressioni regolari, uno per verificare le partite \w e un altro per verificare che \d (tutte le cifre) non corrisponde, che si tradurrebbe in una stringa alfa-solo garantita. Anche in questo caso, mi piacerebbe esorto vivamente di non utilizzare questa tecnica come non c'è alcuna garanzia che cosa \w rappresenterà in una data localizzazione, ma questo non rispondere alla tua domanda.

Io non so niente di JavaScript, ma se ha il supporto unicode corretta, convertire la stringa in un modulo decomposto, quindi rimuovere i segni diacritici da esso ([\u0300-\u036f\u1dc0-\u1dff]). Poi le vostre lettere saranno solo quelli ASCII.

Si può sempre utilizzare una lista nera invece di una whitelist. In questo modo si rimuove solo i caratteri non necessari.

Si potrebbe utilizzare una lista nera -. Un elenco di caratteri da escludere

Inoltre, è importante verificare l'ingresso sul lato server, non solo sul lato client! Lato client può essere aggirato con facilità.

Ci sono alcune scorciatoie per raggiungere tale scopo in altri dialetti espressioni regolari - vedi questa pagina . Ma io non credo che ci siano quelli standardizzati in JavaScript -. Non certo che sarebbe stata sostenuta da tutti i browser

Io sto usando un convertitore prima di controllare, ma non è ancora adatto per tutte le lingue. Non sono sicuro che sia possibile.

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top