Pregunta

Quiero coincidir con una cadena para asegurarse de que contiene sólo letras.

Tengo esto y funciona muy bien:

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

y

Como hablo otro idioma también, que necesito para permitir que todas las cartas, no sólo A-Z. También por ejemplo:

é ü ö ê å ø

¿alguien sabe si hay un término 'alpha' global que incluye todas las letras para usar con regExp? O mejor aún, ¿alguien tiene algún tipo de solución?

Muchas gracias

EDIT: Acabo de dar cuenta que es posible que también quiere permitir '-' y '' en caso de un nombre compuesto como: 'Mary-Ann' o 'Mary Ann'

¿Fue útil?

Solución

No sé la razón real para hacer esto, pero si desea utilizarlo como comprobación previa para, por ejemplo, los nombres de inicio de sesión de usuario oder apodos, me gustaría sugerir que introduzca los caracteres de uno mismo y no lo hace utilizar el conjunto de caracteres alfa '' que encontrará en unicode, ya que probablemente no encontrará una diferencia óptica en las siguientes letras:

А ≠ A ≠ Α  # cyrillic, latin, greek

En estos casos, es mejor especificar las letras necesarias manualmente si se desea minimizar la cuenta de falsificación y tal.

Adición

Bueno, si es para un campo que se supone que es no único, que permitiría griego también. No me sentiría bien cuando obliga a los usuarios a cambiar su nombre a una versión latinizada.

Sin embargo, para los campos únicos como apodos que necesita para dar a sus otros visitantes del sitio una pista, que es realmente el apodo que piensan que es. Ya es bastante malo que la gente con cuentas falsas intercambiando I y L ya. Por supuesto, es algo que depende de sus usuarios; pero para estar seguro de que creo que es mejor para permitir que sólo los signos diacríticos básicas + latino. (Tal vez echar un vistazo a esta lista: América-derived_alphabet )

A modo de sugerencia no probado (con ‘-’, ‘_’ y ‘’):

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

Otra edición: He añadido el apóstrofe para las personas con nombres como O'Neill o O'Reilly. (Y la recta y el apóstrofe invertido para las personas que no pueden entrar en el rizado correctamente.)

Otros consejos

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

No se puede hacer esto en JS. Cuenta con un soporte de expresiones regulares y normalizador muy limitado. Lo que se necesita para construir una matriz de caracteres largo y imposible de mantener con todos los posibles caracteres latinos con signos diacríticos (supongo que hay alrededor de 500 diferentes). Más bien delegar la tarea de validación en el lado del servidor que utiliza otro idioma con los capacidad de más de expresiones regulares, si es necesario con ayuda de Ajax.

En un entorno de expresiones regulares de pleno derecho sólo podría probar si la cadena coincide con \p{L}+. He aquí un ejemplo Java :

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

Como alternativa, también se puede normailze el texto para deshacerse de los signos diacríticos y comprobar si contiene solamente [A-Za-z]+. Aquí está de nuevo una ejemplo de Java :

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

PHP soporta funciones similares.

Cuando traté de poner en práctica la solución de Debilski @ JavaScript no le gustaba la caracteres latinos extendidos - Tenía que codificarlos como JavaScript escapa:

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

Esto puede ser difícil, por desgracia JavaScript tiene bastante pobre apoyo a la internacionalización. Para hacer esta comprobación tendrá que crear su propia clase de caracteres. Esto se debe a que, por ejemplo, \w es la misma que [0-9A-Z_a-z] que no le ayudará mucho y no hay nada como [[:alpha:]] en Javascript. Pero ya que parece que estás sólo va a utilizar otro langauge probablemente puede agregar esos otros personajes en su clase de caracteres.

Por cierto, creo que se necesita un ? o * en su expresión regular allí si miCadena puede tener más de un carácter.

El ejemplo completo,

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

No debe haber, pero la expresión regular será la localización dependiente. Por lo tanto, é ü ö ê å ø no va a ser filtrada si se encuentra en una localización Estados Unidos, por ejemplo. Para asegurar que su sitio web hace lo que quiere en todas las localizaciones, usted debe escribir de forma explícita a los personajes en una forma similar a lo que ya está haciendo.

El único estándar Soy consciente de pensamiento es \w, lo que se correspondería con todos los caracteres alfanuméricos. Se podía hacerlo de la manera "estándar" mediante la ejecución de dos expresiones regulares, uno para verificar partidos \w y otro para verificar que \d (todos los dígitos) no coincide, lo que resultaría en una cadena alfa única garantizada. Una vez más, me pido encarecidamente que no utilice esta técnica ya que no hay garantía de lo \w representará en una localización determinada, pero esto no responder a su pregunta.

No sé nada acerca de Javascript, pero si tiene el soporte adecuado Unicode, convertir su cadena a una forma descompuesta, a continuación, eliminar los signos diacríticos de ella ([\u0300-\u036f\u1dc0-\u1dff]). A continuación, sus cartas serán sólo los ASCII.

Siempre se puede utilizar una lista negra en lugar de una lista blanca. De esta manera sólo se quita los caracteres que no necesita.

Se puede usar una lista negra -. Una lista de caracteres para excluir

Además, es importante verificar la entrada en el lado del servidor, no sólo en el lado del cliente! Del lado del cliente se puede evitar fácilmente.

Hay algunos accesos directos a achive esto en otros dialectos de expresiones regulares - ver esta página . Pero no creo que hay alguna las normalizadas en JavaScript -. Ciertamente no es que esté respaldado por todos los navegadores

Estoy usando un convertidor antes de comprobar, pero todavía no es amigable para todos los idiomas. No estoy seguro de que eso sea posible.

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top