检测textarea中的全部大写字母使用情况?

时间:2013-05-26 03:17:24

标签: javascript regex

我如何编写一个JavaScript函数来检测用户是否在<textarea>中输入全部大写字母,并禁止提交表单,直到违规者更正了他们的文本?可以理解的是,全部大写的定义是有争议的,但这是我的目标:

  • 你做不到。它并不聪明。显然是我想要扯掉的,因为这是令人讨厌的。
  • 我喜欢这个学校。是可以接受的,因为单个字母“all capital”字是英语的一部分。
  • 我的意思是,来吧!这太荒谬了!这应该可以接受吗?在不支持富文本的文本字段中,用户需要能够表达强调。我认为这应该是可以接受的。

有人有什么建议吗?我想象正则表达式是有序的。

3 个答案:

答案 0 :(得分:6)

用于检查字符串是否包含大写字母但没有小写字母的Javascript函数:

function allCaps(word) {
    var containsUpper = /[A-Z]/.test(word);
    var containsLower = /[a-z]/.test(word);

    return containsUpper && !containsLower;
}

答案 1 :(得分:2)

也许只是这个:

 /[a-z]/i.test(str) && str.toUpperCase () == str

将原始字符串与其自身进行比较,如果相等,则用户仅键入大写字母。

答案 2 :(得分:2)

我建议获得大写字母的比例。这是一种方式:

function getCapsRatio(val) {
    // Get the number of uppercase letters
    var up = val.match(/[A-Z]/g).length,

    // Get the number of letters (no space)
        fullLetters = val.match(/[^\s+]/g).length;

    // So the ratio of uppercase letters compared to downcase is...
    return (up * 100) / fullLetters;
}

所以你要使用这个函数:

var ratio = getCapsRatio(value);
if (ratio > 50) {
    // 50% of uppercase letters? this guy is all caps!
}

这应该被研究,但我认为50%是一个很好的比例,认为这个人是全部上限。