我想在开始时只允许一个大写字母,如果(在连字符之后)只允许一个大写字母,并且你只能写一个连字符,这样你就可以写一个双重名字,比如Klas-Bertil而不是别的。< / p>
应该允许:
Klas
Klas-Bertil
Fredrick-Patrick
不
KlAs-
KLaS-bErtIl
Fre-Dr-IckP-aTrick
不知道我是否让自己明白了? :)
提前致谢!
答案 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)
如何而不是限制用户,只需修改他们的输入?我相信双方都会方便得多:
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;