JavaScript RegEx双重名称

时间:2015-01-10 18:25:56

标签: javascript regex

我想在开始时只允许一个大写字母,如果(在连字符之后)只允许一个大写字母,并且你只能写一个连字符,这样你就可以写一个双重名字,比如Klas-Bertil而不是别的。< / p>

应该允许:

Klas
Klas-Bertil
Fredrick-Patrick

KlAs-
KLaS-bErtIl
Fre-Dr-IckP-aTrick

不知道我是否让自己明白了? :)

提前致谢!

4 个答案:

答案 0 :(得分:1)

试试这个:

^[A-Z]?[a-z]*(?:-[A-Z][a-z]*)?$

如果您想在开始时强制出现大写字母:

^[A-Z][a-z]*(?:-[A-Z][a-z]*)?$

答案 1 :(得分:0)

为名称部分提供最简单的RegEx,例如

var regEx = /^[A-Z][a-z]*$/;

这将匹配任何以零个或多个空格字符开头的字符串,后跟大写字母,后跟一串小写字母,结尾为零个或多个字符。

现在,将输入字符串与-分开并在所有部分上应用regEx以查看所有部分是否匹配。

var regEx = /^[A-Z][a-z]*$/;

function isInitCapNames(name) {
    return name.split("-").every(function(currentPart) {
        return regEx.test(currentPart);
    });
}

测试用例:

console.assert(isInitCapNames('Klas') === true);
console.assert(isInitCapNames('Klas-Bertil') === true);
console.assert(isInitCapNames('Fredrick-Patrick') === true);
console.assert(isInitCapNames('KlAs-') === false);
console.assert(isInitCapNames('KLaS-bErtIl') === false);
console.assert(isInitCapNames('Fre-Dr-IckP-aTrick') === false);

答案 2 :(得分:0)

我希望这对你有用。

/^([A-Z]{1,1})([a-z]+)-([A-Z]{1,1})([a-z])$/

答案 3 :(得分:0)

如何而不是限制用户,只需修改他们的输入?我相信双方都会方便得多:

&#13;
&#13;
var names = ["KlAs-","KLaS-bE$@rtIl-banana","Fre-Dr-IckP-aTrick","Klas","Klas-Bertil","Fredrick-Patrick"]

function FixName(name){
    //remove all special characters from the name
    name = name.replace(/[^a-zA-Z0-9_-]/g,'');
    //check for hyphens and only get 1 of those, takes 2 name parts.
    var name_parts = name.split('-',2);
    //fix the first name part
    var Fixed_Name=(name_parts[0].charAt(0).toUpperCase() + name_parts[0].slice(1).toLowerCase()).trim();
    //check if there is anything after the hyphen, and fix it too.
    if(name_parts[1].trim()!=""){
        Fixed_Name+="-"+(name_parts[1].charAt(0).toUpperCase() + name_parts[1].slice(1).toLowerCase()).trim();
    }
    alert(Fixed_Name);
}

FixName(names[1]);
&#13;
&#13;
&#13;