【问题标题】:How to detect boolean true and false in javascript? [duplicate]如何在javascript中检测布尔真假? [复制]
【发布时间】:2018-10-07 08:57:14
【问题描述】:

这是我的日期验证代码,将28/02/2017 填入输入文本并按下按钮。

首先它会在代码中看到true,如果第一个警报是true,第二个警报也会提醒true。但我的第二个是警报false

检测布尔值的错误是什么

if(regex.test(txt) === true)
{
    alert("true");
    p.innerHTML = "<h1 style='color:green'>Correct</h1>";
}
else
{
    alert("false");
    p.innerHTML = "<h1 style='color:red'>Wrong</h1>";;
}

.

<input type="text" id="date" name="date" value="dd/mm/yyyy" />
<button onclick="isDate();">Check</button>

<p id="response"></p>
<script>
function isDate() {
    
    var regex = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;
    
    var txt = document.getElementById("date").value;
    var p = document.getElementById("response");
    
	alert(regex.test(txt));
	
	if(regex.test(txt) === true)
	{
		alert("true");
		p.innerHTML = "<h1 style='color:green'>Correct</h1>";
	}
	else
	{
		alert("false");
		p.innerHTML = "<h1 style='color:red'>Wrong</h1>";;
	}  
} 
</script>

【问题讨论】:

  • 出于某种原因,在重复测试的警报下方添加了 console.log,然后删除了 ===true 它返回 true 然后记录 false ... 很奇怪!诡异

标签: javascript jquery html


【解决方案1】:

原因是regex.test() 将搜索字符串并在匹配时返回true。如果您随后再次致电.test(),它将从上次中断的地方继续。

在带有全局标志的正则表达式上使用 test()

如果正则表达式设置了全局标志,test() 将推进正则表达式的lastIndex。后续使用test() 将在lastIndex 指定的str 的子字符串处开始搜索(exec() 还将推进lastIndex 属性)。

从这里:MDN web docs – RegExp.prototype.test()

【讨论】:

  • 干得好,先生..
  • 只是一个问题,为什么删除 g 修饰符会起作用?谢谢!
  • @Albeis 如果删除全局标志,它每次都会从头开始搜索。
  • 谢谢!所以删除全局标志应该是另一种解决方案,对吗?问候
  • @Albeis ‘g’ 代表 ‘global’ - g 修饰符设置 global 标志。这会影响文档中描述的“如果正则表达式设置了全局标志”行为。
猜你喜欢
  • 1970-01-01
  • 2020-12-31
  • 2020-01-05
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多