Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测文本区域中所有大写字母的使用情况?_Javascript_Regex - Fatal编程技术网

Javascript 检测文本区域中所有大写字母的使用情况?

Javascript 检测文本区域中所有大写字母的使用情况?,javascript,regex,Javascript,Regex,如何编写JavaScript函数来检测用户是否在中键入所有大写字母,并在违规者更正其文本之前不允许提交表单?可以理解,所有上限的定义都有争议,但我的目标是: 你不能那样做。这不聪明。很明显这就是我想说的,因为这很讨厌 我喜欢这所学校。是可以接受的,因为单字母“所有大写”单词是英语的一部分 我是说,来吧!这太荒谬了!这是否可以接受?在不支持富文本的文本字段中,用户需要能够表达强调。我认为这应该是可以接受的 有人有什么建议吗?我想正则表达式已经就绪。用于检查字符串是否有大写字母但没有小写字母的J

如何编写JavaScript函数来检测用户是否在
中键入所有大写字母,并在违规者更正其文本之前不允许提交表单?可以理解,所有上限的定义都有争议,但我的目标是:

  • 你不能那样做。这不聪明。很明显这就是我想说的,因为这很讨厌
  • 我喜欢这所学校。是可以接受的,因为单字母“所有大写”单词是英语的一部分
  • 我是说,来吧!这太荒谬了!这是否可以接受?在不支持富文本的文本字段中,用户需要能够表达强调。我认为这应该是可以接受的

有人有什么建议吗?我想正则表达式已经就绪。

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

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

    return containsUpper && !containsLower;
}

也许简单地说:

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

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

我建议获得大写字母的比例。这里有一个方法:

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%是一个很好的比率,认为这家伙都是大写。

可能你需要寻找ASCII字符>95。也许只是为允许的大写字符百分比设置一个阈值?不超过50%?我认为,一旦你更准确地说明问题,答案就不难了。你的定义仍然不够精确。你将如何衡量这一点?最多允许n个大写单词?我不确定定义一个阈值是否合适,因为用户基本上可以在所有大写字母中键入每一个单词,并将阈值保持在50%以下,不是吗?我认为需要应用某种逻辑如果文本区域不包含小写字母,并且包含任何大写字母,那么它都是大写的。第二个检查可以避免抱怨字段是否只是数字(尽管对于文本区域来说这似乎不太可能。如果只
word.toUpperCase()===word
就足够了,这是一个非常糟糕的解决方案。@FlorianMargaine不一定是因为解决方案
word.toUpperCase()===word
如果word===12345或….或其他不包含字母的字符串,则验证结果将为true。如果有人键入不包含字母的字符串,则验证结果将不正确。假设有人问:“你多大了?”该人回答“13”。系统不允许他们发送回复“13”因为它会认为这都是toUpperCase wayGood point@chrislondon的caps。我添加了一个测试来解决这个问题。