根据正则表达式检查json值是否引发函数错误

时间:2018-08-23 20:37:04

标签: javascript

我在使用if语句时遇到问题,我想根据regExp检查该值。但是我收到“ data [key] .name不是函数”,我该如何解决此问题?

document.querySelector('#search').onkeyup = function() {
var searchField = document.querySelector('#search').value;
var myExp = new RegExp(searchField, "i");

var request = new XMLHttpRequest();
request.open('GET', 'allCountries.json', true);

request.onreadystatechange = function() {
    if ((request.readyState === 4) && (request.status === 200)) {
        var data = JSON.parse(request.responseText);
        var output = '<ul class="searchresult">';
        for(var key in data) {
            if(data[key].name(myExp) != -1 || data[key].code(myExp) != -1) {
                output += '<li>' + data[key].name + ' - ' + data[key].code + 
                '</li>';
            }
        }
        output += '</ul>';
        document.querySelector('#update').innerHTML = output;
    } 
};

request.send();
};

2 个答案:

答案 0 :(得分:1)

如果要检查字符串是否匹配RegEx模式,请使用String#match()函数:

将您的if语句更改为

if (data[key].name.match(myExp) || data[key].code.match(myExp)) {

var myExp = new RegExp("something.*[23]", "i");

var data = {a:{name:"something1", code:"somethingElse1"}, b:{name:"something2", code:"somethingElse2"}, c:{name:"something3", code:"somethingElse3"}}
var output = '<ul class="searchresult">';
for (var key in data) {
  if (data[key].name.match(myExp) || data[key].code.match(myExp)) {
    output += '<li>' + data[key].name + ' - ' + data[key].code +
      '</li>';
  }
}
output += '</ul>';
document.querySelector('#update').innerHTML = output;
<div id="update"></div>

答案 1 :(得分:0)

如果namecode是字符串,则应通过以下方式测试您的正则表达式:

if(myExp.test(data[key].name) || myExp.test(data[key].code))