【问题标题】:How to check if firstname's and lastname's first characters are uppercase?如何检查名字和姓氏的第一个字符是否为大写?
【发布时间】:2018-03-12 16:12:32
【问题描述】:

我有一个输入字段,用户将在其中输入他们的名字和姓氏。 例如:(约翰·史密斯) 如何检查名字(J)的第一个字符和姓氏(S)的第一个字符是否为大写?如果匹配,我想返回 true,如果不匹配,我想返回 false。

我一直在寻找可以尝试 RegExp ^[A-Z][a-z]*(-|\s)[A-Z][a-z]*$ 的解决方案,但我不知道如何使用它。

谢谢:)

【问题讨论】:

  • 您可以使用您的regextest,就像在这个fiddle 中一样
  • 不验证名称。但无论如何:^[A-Z][A-Za-z]*(?:[\s-][A-Z][A-Za-z]*)+$

标签: javascript regex


【解决方案1】:

应该有几个层是你应该实现的。

第一个是在您的标记中,将您输入的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,结果被后端代码捕获。

【讨论】:

    【解决方案2】:

    有个好简单的回答here

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

    【讨论】:

      【解决方案3】:

      使用简单的 css 将您的输入大写:

      input {
        text-transform: capitalize;
      }
      
      <input type="text" name="textfield">
      

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 2021-05-04
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多