我试图计算句子中句号的数量。当句子中有句号时,此代码可以正常工作。但是,如果没有句号,我会收到一条错误消息Cannot read property 'length' of null
编写代码以处理此错误的最佳方法是什么,并将0
显示为用户的完整停止数。
See js fiddle here for the example
JS
$(".calculate").click(function() {
var input = $(".text-input").val();
var fullStopCount = 0;
fullStopCount = input.match(new RegExp("\\.", "g")).length;
$(".fullstop-count").text(". = " + fullStopCount);
});
HTML
<div class="textarea-holder">
<textarea class="text-input" name="textarea" rows="5" cols="30">This sentence contains one fullstop.</textarea>
</div>
<button class="calculate">Calculate</button>
<p class="fullstop-count"></p>
答案 0 :(得分:2)
只需制作另一个if
(本例中为三元组)来检查收到的结果:
var fullStops = input.match(new RegExp("\\.", "g"));
var fullStopsCount = fullStops ? fullStops.length : 0;
$(".fullstop-count").text(". = " + fullStopCount);
答案 1 :(得分:1)
根据文档,如果未找到匹配项 match()
,则返回SELECT st_index,
(case when subject='Maths' then marks end )as 'Maths',
(case when subject='Science' then marks end )as 'Science'
FROM tbl_marks
where term=1
group by st_index
,在这种情况下,您无法获得null
length
的属性1}}。
此外,您可以使用null
代替/\./g
,因为它已经是正则表达式对象,因此速度会快得多。
new RegExp("\\.", "g")
&#13;
$(".calculate").click(function() {
var input = $(".text-input").val();
var fullStopCount = 0;
// if match() returns null ( which is falsy value) returns [] 0therwise the matched array
fullStopCount = (input.match(/\./g) || []).length;
$(".fullstop-count").text(". = " + fullStopCount);
});
&#13;
FYI : 有关short-circuit evaluation of logical operator is here的更多信息。
答案 2 :(得分:0)
尝试先检查变量是否为空以避免错误
if (input.match(new RegExp("\\.", "g")) != null) {
// check the length...
}
答案 3 :(得分:0)
如果没有'。'在文本中,input.match(new RegExp("\\.", "g"))
将返回null。只有在至少有一个完整停止时才应使用.length
,否则你知道没有
$(".calculate").click(function() {
var input = $(".text-input").val();
var fullStopCount = 0;
fullStopReg = input.match(new RegExp("\\.", "g"));
if(fullStopReg == null){
$(".fullstop-count").text(". = 0");
}
else{
fullStopCount = fullStopReg.length;
$(".fullstop-count").text(". = " + fullStopCount);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="textarea-holder">
<textarea class="text-input" name="textarea" rows="5" cols="30">This sentence contains one fullstop.</textarea>
</div>
<button class="calculate">Calculate</button>
<p class="fullstop-count"></p>