如果字符串与正则表达式 JavaScript 不匹配,则返回 True
Return True if a string doesn't match regex javascript
我正在尝试编写一个函数来确定输入是否在"喊叫"。听到的意思是用所有大写字母书写。我使用的逻辑是
if (this.toUpperCase() === this)
这工作得很好,但是,我遇到的问题是严格的数字或符号(?, !等)字符串被标记为喊叫。
我已经尝试了一些东西,大意是
if (this.toUpperCase() === this && !this.match(/a-zA-Z/))
然而,这似乎并不能解决问题。错误在于我的 JavaScript 还是我的正则表达式?提前感谢任何帮助!
你的第二个条件是错误的:你正在检查一个不包含字母(大写或小写)的字符串。而且您忘记了正则表达式中的方括号。您应该检查至少包含一个大写字母的字符串:
if ((this.toUpperCase() === this) && (this.match(/[A-Z]/)))
你可以做这样的事情:
var str = this;
var R = function(regex) {
return (str.match(regex) || []).length
};
var ratio = {
upper: R(/[A-Z]/g),
lower: R(/[a-z]/g),
letters: R(/[A-Z]/gi),
spaces: R(/'s/g),
non_letters: R(/[^A-Z]/gi)
};
然后你可以使用一些逻辑,比如:
// if only upper case letters
if (this.length == ratio.upper + ratio.spaces)
// do something ..
希望对您有所帮助。
我认为Fabius的答案是你要找的,但我建议对逻辑进行一些更改,因为您最终可能会捕获更多而不是您想要的全部内容:
- 这是在喊!!
- Y?
- 上面是喊吗?
- 请使用 SSCCE。 对此
- 有何看法?这是在喊吗?
以下是我的建议:
var resultsDiv = $('#results'),
tests = [
{ string: 'THIS IS SHOUTING!!' },
{ string: 'Y?' },
{ string: 'is the above SHOUTING?' },
{ string: 'Please use SSCCE.' },
{ string: 'wHAT ABOUT THIS? IS THIS SHOUTING?' }
];
$.each( tests, function(i, test){
var string = test.string,
isShouting;
// First, strip out non-alpha characters:
string = string.replace(/[^a-z]/ig, '');
var beforeLength = string.length;
// Now remove all uppercase characters:
string = string.replace(/[^A-Z]/g, '');
var afterLength = string.length;
// Now, compare the length of the before and after, with a threshold for short string.
// Basically, if the before string is at least 4 characters long and more than half of
// the string is uppercase, then flag it as "shouting".
isShouting =
( beforeLength >= 4 && ( afterLength / beforeLength >= 0.50 ) );
$('<div>')
.text(test.string)
.css('color', 'darkblue')
.appendTo( resultsDiv );
$('<div>')
.text(isShouting ? "SHOUTING DETECTED!" : "quiet and controlled.")
.css('margin-bottom', '15px')
.css('color', isShouting ? 'red' : 'black')
.appendTo( resultsDiv );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="results">
</div>
您可以摆弄阈值以找到符合您期望的内容。 50% 大写可能过于严格。请记住,任何规则总会有例外,因此请确保"大喊大叫"的后果不会太繁重。
另请注意,我没有做太多工作来国际化此示例。我把它留给读者练习。上面的例子足以证明这个理论。
您正在询问正则表达式,但您最初的示例没有使用它,因此听起来您要使用正则表达式只是为了掩盖第一个示例中的错误。
你不需要正则表达式来做你想做的事情。
如果字符串可以容纳非字母字符,但字母需要全部大写,请尝试
if (this.toLowerCase() !== this)
支持您可能想要的国际化
if (this.toLocaleLowerCase() !== this)
某些语言有不同的大小写规则,如文档 toLacleLowerCase() 文档中所述
相关文章:
- 对于loop.if-仅在经过所有间隔后返回true
- 如果函数返回True,则显示Javascript按钮
- Javascript If else 只返回 TRUE 或只返回 FALSE
- 过滤器返回true或false
- 我对“;返回true"嵌套函数内部;t工作
- 如何在成功输入时使“返回TRUE”
- 检查一个元素是否有一个类与另一个类总是返回true
- JavaScript函数未返回true
- 如果URL中有任何字符串变体匹配,则返回true
- 如何使以下函数返回true或false
- 使用“in”关键字检查 0 始终返回 true
- hasOwnProperty 在对照父对象属性进行检查时返回 true
- 为什么 isNaN 总是返回 true
- _.数组中的每个查找值都返回 true 或 false.使用下划线 JS
- 错误地返回true
- 为什么asp:LinkButton服务器端事件没有'当clientClick返回true时,t激发
- 阻止表单提交 javascript 为什么有一个明显的错误语句返回 true
- Node js命令器args返回true而不是值
- 如何将html表单与php链接,以便在例如单击按钮时返回true
- 从OnClientClick调用函数时,在JavaScript中返回true