如何把第一个字母大写,其余的小写? [JS]
1)我正在尝试将第一个字母应用为大写字母 ,将另一个字母应用为小写字母 。 如果用户在输入中写入,它应该自动转换。 例子:
“isaac guilhermearaújo”改为“Isaac GuilhermeAraújo”
“iSAAC guilherme arajjo”改为“Isaac GuilhermeAraújo”
2)在巴西,有连词的名字。 例如:“das”“da”“dos”“do”“de”“e”。
卡洛斯爱德华多胡利奥多斯桑托斯
Carlos Eduardo dos Santos e Silva
卡洛斯·爱德华多· 达席尔瓦
3)我有这个问题与名称字段一起工作。 用下面的代码,我可以将第一个字母用大写字母,但其他字母用小写字母不能。 然后,根据问题2,如果我写:
输入的值:“ do uglas de oliveirajúnior”
应该是:“Douglas de OliveiraJúnior”
不应该:“douglas de OliveiraJúnior”。 //用当前代码显示的值
function contains(str, search){
if(str.indexOf(search) >= 0){
return true;
} else {
return false;
}
}
$.fn.capitalize = function(str) {
$.each(this, function() {
var split = this.value.split(' ');
for (var i = 0, len = split.length; i < len; i++) {
var verify = (split[len - 1] == "D" || split[len - 1] == "d") && (str == "e" || str == "E") || (str == "o" || str == "O");
if (verify == false) {
if ( contains(split[i], 'de') == false && contains(split[i], 'do') == false) {
split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1);
}
}
}
this.value = split.join(' ');
});
return this;
};
$(".capitalize").keypress(function(e) {
var str = String.fromCharCode(e.which);
$(this).capitalize(str);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>Nome: </label>
<input type="text" id="nome" name="nome" class="form-control input-sm capitalize">
该解决方案还修复了大写的连接词,例如carlos DE silva
。
尝试下面的代码片段:)
var connectives = {
das: true,
da: true,
dos: true,
do: true,
de: true,
e: true
};
function capitalize(str) {
return str
.split(" ")
.map(function(word) {
return !connectives[word.toLowerCase()]
? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()
: word.toLowerCase();
})
.join(" ");
};
$(".capitalize").keyup(function() {
var cursorStart = this.selectionStart;
var cursorEnd = this.selectionEnd;
var capitalizedString = capitalize($(this).val());
$(this).val(capitalizedString);
this.setSelectionRange(cursorStart, cursorEnd);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>Nome: </label>
<input type="text" id="nome" name="nome" class="form-control input-sm capitalize">
您可以使用格式化功能,将除白名单中提供的所有单词之外的所有单词大写。 然后,每当用户按下一个按键时输入值的格式(如果用户移动输入光标,效果不好):
function format(string, noCapList=[]) {
const words = string.toLowerCase().split(' ');
return words.map((word) => {
if(!word.length || noCapList.includes(word)) {
return word;
} else {
return word[0].toUpperCase() + word.slice(1);
}
}).join(' ');
}
const input = document.querySelector('input');
input.addEventListener('keyup', () => {
input.value = format(input.value, ["das", "da", "dos", "do", "de", "e"]);
});
<input/>
SimpleJ的答案是正确的,但要澄清你的原始方法:“问题”在contains
函数中 - 它实际上根据它的名称做它应该做的,并且如果str
包含search
,则返回true,因此contains('douglas', 'do') === true
; 你已经将字符串拆分成单独的单词,所以只需使用split[i] !== "de" && split[i] !== "do"
而不是contains
调用。
上一篇: How to put the first letter capitalized and the rest lowercase? [JS]