我想匹配的字符串以确保它仅包含字母。

我有了这个和它的作品就好了:

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

<强> BUT

由于我太讲另一种语言,我需要让所有的字母,不只是A-Z。此外,例如:

é ü ö ê å ø

没有人知道是否有一个全球性的'alpha'术语,它包括所有的字母用正则表达式使用?甚至更好,没有任何人有某种解决方案?

很多

由于

修改 只是意识到你可能也想允许“ - ”和“”柜面像双名的:“玛丽安”或“玛丽安”

有帮助吗?

解决方案

我不知道这样做的实际原因,但如果你想用它作为预检查,比如说,登录名奥德用户昵称,我建议你自己输入的字符,且不要使用整个“阿尔法”字,你会以Unicode发现,因为你可能不会发现的光学差在下列字母:

А ≠ A ≠ Α  # cyrillic, latin, greek

在这种情况下,最好手动指定允许字母,如果你希望尽量减少帐户和作假等。

<强>加成

那么,如果它是被认为是不唯一的一个领域,我会允许希腊也是如此。我会觉得不舒服,当我强迫用户进入改变了他们的名字一个拉丁化版本。

但像你需要给网站的你的其他游客的提示,它确实是他们认为这是昵称昵称独特的领域。够糟糕,人们将假账户的交换我和L了。当然,它的东西,取决于你的用户;但可以肯定,我认为这是更好地只允许基本的拉丁+变音符号。 (也许有看看这个列表:拉丁derived_alphabet

作为一个未测试的提议(具有“ - ”,“_”和“”):

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

<强>另一个编辑: 我已经添加了撇号人喜欢奥尼尔和O'Reilly的名称。 (和直和谁不能正确输入卷曲一个人逆转撇号。)

其他提示

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

您不能在JS做到这一点。它有一个非常有限的正则表达式和正规化的支持。您将需要构建一个漫长和难以维护的字符数组是所有可能用拉丁文区别标记(我猜大约有500种不同的)角色。而委托验证任务以它使用与更多的正则表达式capabilties另一种语言服务器端,如果必要的话使用Ajax的帮助。

在一个完全成熟的正则表达式的环境,你可以只测试是否匹配字符串\p{L}+。这里有一个 Java示例的:

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

另外,您也可以normailze文本摆脱辨别标志并检查它是否只包含[A-Za-z]+。这里又是一个 Java示例的:

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

PHP支持类似的功能。

当我试图执行@ Debilski的解决方案的JavaScript不喜欢扩展的拉丁字符 - 我不得不对他们的代码,如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);
}

这可能会非常棘手,不幸的是JavaScript有国际化的非常贫穷的支持。做此项检查,你必须创建自己的字符类。这是因为,例如,\w相同[0-9A-Z_a-z]这将不利于你多少并没有像在Javascript [[:alpha:]]什么。但是,因为它听起来像你只打算使用一个其他的langauge,你可能只需要添加这些其他字符到您的字符类。

顺便说一句,我认为你需要在你的正则表达式有一个?*如果myString的可以比一个字符长。

在充分例如,

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

有应该的,但是该正则表达式将是本地化依赖性的。因此,é ü ö ê å ø不会,如果你是在美国的本地化,例如过滤。为了确保你的网站,你想要做所有的本地化,你应该明确地写出来的字类似于你已经做什么形式的东西。

的唯一标准一个我所知道的,虽然是\w,这将匹配所有字母数字字符。您可以通过运行两个正则表达式,一个验证\w比赛做了“标准”的方式,另外,以验证\d(所有数字)不匹配,这将导致只能保证字母串。同样,我强烈呼吁,因为没有什么保证将\w在给定的本地化代表你不使用这种技术,但是这并回答你的问题。

我不知道任何的Javascript,但如果有适当的Unicode支持,您的字符串转换为分解表,然后从它([\u0300-\u036f\u1dc0-\u1dff])删除变音符号。然后,你的信将只ASCII的。

您可以随时使用黑名单,而不是白名单。这样,你只能删除你不需要的字符。

您可以使用黑名单 - 字符的列表中排除

此外,为了确认在服务器侧上的输入是很重要的,不仅对客户端!客户端可以很容易地被旁路。

我使用一个转换器检查过,但它仍然不是所有的语言友好。 我不知道这是可能的。

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);
scroll top