【发布时间】:2018-03-12 16:12:32
【问题描述】:
我有一个输入字段,用户将在其中输入他们的名字和姓氏。 例如:(约翰·史密斯) 如何检查名字(J)的第一个字符和姓氏(S)的第一个字符是否为大写?如果匹配,我想返回 true,如果不匹配,我想返回 false。
我一直在寻找可以尝试 RegExp ^[A-Z][a-z]*(-|\s)[A-Z][a-z]*$ 的解决方案,但我不知道如何使用它。
谢谢:)
【问题讨论】:
标签: javascript regex
我有一个输入字段,用户将在其中输入他们的名字和姓氏。 例如:(约翰·史密斯) 如何检查名字(J)的第一个字符和姓氏(S)的第一个字符是否为大写?如果匹配,我想返回 true,如果不匹配,我想返回 false。
我一直在寻找可以尝试 RegExp ^[A-Z][a-z]*(-|\s)[A-Z][a-z]*$ 的解决方案,但我不知道如何使用它。
谢谢:)
【问题讨论】:
标签: javascript regex
应该有几个层是你应该实现的。
第一个是在您的标记中,将您输入的pattern 属性设置为等于以下正则表达式:
^[A-Z].* [A-Z].*$
第二个是在您的样式中,设置输入以包含以下内容:
[selector] {text-transform: capitalize;}
第三个是在您的 JavaScript 中,使用以下函数将输入的字符串更改为适当大小写的等效项,该函数将允许您在表单的提交事件 (courtesy of Tuan) 中转换输入的值:
String.prototype.toProperCase = function () {
return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
};
最后,第四个将在您的后端代码中,您需要重新验证输入是否也与那里的格式匹配。但是由于您没有指定后端语言,因此我无法为您提供帮助。
做这四件事可以完成一些事情。对于使用您的表单的普通用户,他们会通过 CSS 样式输入所需的格式。对于试图绕过您想要的行为的恶意用户,newb 只会尝试删除 pattern 属性,只是为了被 JavaScript 捕获。稍微有点脑子的用户会删除 JavaScript,结果被后端代码捕获。
【讨论】:
有个好简单的回答here
function toTitleCase(str)
{
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
【讨论】:
使用简单的 css 将您的输入大写:
input {
text-transform: capitalize;
}
<input type="text" name="textfield">
【讨论】: