2017-03-13 45 views
-2

我想强制文本字段的输入值符合特定的格式。它需要大写,并且不允许有数字。如何格式化keyDown()的输入值?

我想这个事件发生在onKeydown()

例子:

Lionel MESSI => Lionel Messi 
LiONEL MesSI => Lionel Messi 

Neymar JR => Neymar Jr 
Neymar 22 JR => Neymar Jr 

Franck D'HONNEUR => Franck D'Honneur 

Kevin PEREZ ROBERTO => Kevin Perez Roberto 
+0

你说的'力user'是什么意思?你想在他进入后改变文字吗?当他进入它? – Weedoze

+0

查看文档... [String - JavaScript](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/String) – dth

+1

@Steffi是我对任何帮助的回答吗? – Chris

回答

2

doi没有简单的单线程方法这个。但是,您可以创建一个可以为您设置名称格式的函数。

最初从this answer取,我已经修改了它稍微反映您所需的输出:

var name1 = "Lionel MESSI"; 
 
var name2 = "LiONEL MesSI"; 
 
var name3 = "Neymar JR"; 
 
var name4 = "Neymar 22 JR"; 
 
var name5 = "Franck D'HONNEUR"; 
 
var name6 = "Kevin PEREZ ROBERTO"; 
 

 
function toTitleCase(str) { 
 
    return str.replace(/\w\S*/g, function(txt){ 
 
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
 
    }).replace(/[0-9]/g, ''); 
 
} 
 

 
console.log(toTitleCase(name1)); 
 
console.log(toTitleCase(name2)); 
 
console.log(toTitleCase(name3)); 
 
console.log(toTitleCase(name4)); 
 
console.log(toTitleCase(name5)); 
 
console.log(toTitleCase(name6));

你可能想从MDN文档退房toUpperCase()toLowerCase()


要获得此功能的onKeyDown(),你可以使用jQuery像下面的代码片段。我建议反对onKeyDown(),但这会造成奇怪的用户体验。改为尝试onBlur

function toTitleCase(str) { 
 
    return str.replace(/\w\S*/g, function(txt){ 
 
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
 
    }).replace(/[0-9]/g, ''); 
 
} 
 

 
$("#name").on("keydown", function() { 
 
    $(this).val(toTitleCase($(this).val())); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
Name: <input id="name">

+0

完美。非常感谢你 – Steffi

0

一个小助手功能,从这个问题上的帮助:How do I make the first letter of a string uppercase in JavaScript?

我写了一个快速的脚本,输入模糊火灾:

$(document).ready(function() { 
    function capitalizeFirstLetterOfEachWord(string) { 
     strArr = string.split(' '); 
     resArr = []; 
     for(i=0;i<strArr.length;i++){ 
      resArr[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1); 
     } 
     return resArr.join(" "); 
    } 

    $('.forceCapital').blur(function(e) { 
     $(this).val(capitalizeFirstLetterOfEachWord($(this).val())); 
    }); 
}); 

https://jsfiddle.net/sa2ox30d/2/

+0

这只有大写第一个字母。 – Chris

+0

以及为什么不使用css? – Gayane

+0

@加奈看到我的编辑。 CSS无法解析字符串或侦听onBlur事件。 – symlink