Frage

Ich möchte eine Zeichenfolge übereinstimmen, um sicherzustellen, dass es nur Buchstaben enthält.

Ich habe dies und es funktioniert gut:

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

ABER

Da ich eine andere Sprache zu sprechen, muss ich alle Buchstaben ermöglichen, nicht nur A-Z. Auch zum Beispiel:

é ü ö ê å ø

weiß jemand, ob es ein globaler 'alpha' Begriff ist, die alle Buchstaben mit regExp verwenden enthält? Oder noch besser, hat jemand irgendeine Art von Lösung?

Thanks a lot

EDIT: Nur realisiert, dass Sie vielleicht auch wollen, erlauben ‚-‘ und ‚‘ einhüllen eines Doppelnamen wie: ‚Mary-Ann‘ oder ‚Mary Ann‘

War es hilfreich?

Lösung

Ich weiß nicht, den eigentlichen Grund, dies zu tun, aber wenn man es als verwenden möchten Pre-Check für, sagen wir, Benutzernamen oder Benutzer Spitznamen, ich würde vorschlagen, dass Sie die Zeichen selbst eingeben und nicht verwenden, um die gesamten ‚alpha‘ Zeichen in Unicode finden, weil Sie wahrscheinlich keinen optischen Unterschied in den folgenden Buchstaben finden:

А ≠ A ≠ Α  # cyrillic, latin, greek

In solchen Fällen ist es besser, die erlaubten Buchstaben manuell angeben, wenn Sie Konto fälschen minimieren wollen und so weiter.

Addition

Nun, wenn es für ein Feld ist, das als nicht einzigartig sollte, würde ich auch griechische ermöglichen. Ich würde nicht gut fühlen, wenn ich Benutzer zu zwingen, in ihren Namen auf eine latinisierte Version zu ändern.

Aber für einzelne Felder wie Spitznamen Sie Ihre anderen Besucher der Website einen Hinweis geben müssen, dass es wirklich den Spitznamen sie denken, es ist. Schlimm genug, dass die Leute gefälschte Konten mit Vertauschung I und l bereits. Natürlich ist es etwas, das auf Ihrem Benutzer abhängt; aber sicher zu sein, ich denke, es ist besser, nur grundlegenden lateinisch + diakritische Zeichen zu ermöglichen. (Vielleicht in dieser Liste einen Blick: Latein-derived_alphabet )

Als ungetestet Vorschlag (mit ‚-‘, ‚_‘ und ‚‘):

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

Ein weiterer edit: Ich habe das Apostroph für Menschen mit Namen wie O'Neill oder O'Reilly hinzugefügt. (Und die gerade und die umgekehrte Apostroph für Leute, die die geschweiften man nicht betreten kann richtig.)

Andere Tipps

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

Sie können nicht tun dies in JS. Es hat eine sehr begrenzte regex und normalizer Unterstützung. Sie müßten ein langwieriges und wartbaren Zeichenfeld mit alle möglich lateinischen Buchstaben mit diakritischen Zeichen konstruieren (ich denke, es gibt rund 500 verschiedene). Vielmehr delegieren Validierungs-Task auf der Server-Seite, die eine andere Sprache mit mehr regex capabilties verwendet, wenn nötig mit Hilfe von Ajax.

In einer vollwertigen regex Umgebung könnte man einfach testen, ob die Zeichenfolge \p{L}+ übereinstimmt. Hier ist ein Java Beispiel :

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

Alternativ können Sie normailze auch der Text der diakritischen Zeichen, um loszuwerden, und überprüfen, ob es [A-Za-z]+ nur enthält. Hier ist wieder ein Java Beispiel :

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

PHP unterstützt ähnliche Funktionen.

Als ich versuchte @ Debilski-Lösung zu implementieren JavaScript ist nicht die erweiterten lateinischen Buchstaben nicht mochte - ich hatte sie zu codieren, wie JavaScript entkommt:

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

Das kann tückisch sein, leider JavaScript hat ziemlich schlechte Unterstützung für die Internationalisierung. Um diese Prüfung zu tun haben, werden Sie Ihre eigene Zeichenklasse erstellen. Dies liegt daran, zum Beispiel \w die gleiche wie [0-9A-Z_a-z] ist, die Ihnen nicht viel helfen, und es gibt nicht so etwas wie [[:alpha:]] in Javascript. Aber da es klingt wie Sie sind nur gehen, ein anderes Langauge verwenden, können Sie wahrscheinlich nur die anderen Charaktere in Ihre Zeichenklasse hinzuzufügen.

By the way, ich glaube, Sie ein ? oder * in Ihrem regulären Ausdruck benötigen, wenn myString länger als ein Zeichen sein kann.

Das vollständige Beispiel:

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

sollte es sein, aber die regex wird Lokalisation abhängig. So é ü ö ê å ø wird nicht gefiltert werden, wenn Sie auf einem US-Lokalisierungs sind, zum Beispiel. Um sicherzustellen, dass Ihre Website tut, was Sie über alle Lokalisierungen wollen, sollten Sie explizit die Zeichen in einer Form schreiben, ähnlich dem, was Sie bereits tun.

Der einzige Standard, den ich von obwohl bewusst bin, ist \w, die alle alphanumerischen Zeichen passen würde. Man könnte es den „Standard“ Art und Weise tun, die von zwei regex ausgeführt wird, ein \w Spiele zu überprüfen und eine andere, die \d (alle Ziffern), um sicherzustellen, nicht übereinstimmt, die in einer garantierten Alpha-only Zeichenfolge führen würde. Auch hier würde ich empfehlen Ihnen dringend, diese Technik nicht zu verwenden, da es keine Garantie ist, was \w in einer bestimmten Lokalisation vertreten wird, aber dies Ihre Frage nicht beantworten.

Ich weiß nichts über Javascript, aber wenn es die richtige Unicode-Unterstützung hat, wandeln Sie Ihren String in eine zerlegten Form, entfernen Sie dann die diakritischen Zeichen von ihm ([\u0300-\u036f\u1dc0-\u1dff]). Dann werden Ihre Briefe nur ASCII diejenigen sein.

Sie können immer eine schwarze Liste statt einer weißen Liste verwenden. So entfernen Sie nur die Zeichen, die Sie nicht benötigen.

Sie können eine schwarze Liste verwenden -. Eine Liste von Zeichen ausschließen

Auch ist es wichtig, den Eingang auf dem Server-Seite zu überprüfen, nicht nur auf Client-Seite! Client-Seite kann leicht umgangen werden.

Es gibt einige Abkürzungen diese Dialekte in anderen regulären Ausdruck achive - siehe dieser Seite . Aber ich glaube nicht, dass es in JavaScript keine standardisierten diejenigen -. Schon gar nicht, dass würde von allen Browsern unterstützt werden

Ich bin mit einem Konverter vor der Kontrolle, aber es ist noch nicht freundlich für alle Sprachen. Ich bin nicht sicher, ob das möglich ist.

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top