TypeError:无法获取属性“test”的值:对象为空或未定义
2015-10-27
109
我有一个函数,它通过一组正则表达式来评估字符串。这些正则表达式被包装为
charRules
中的自己的对象。
如果字符串无效,则返回 false,否则返回 true。
有效字符串示例:
1234567890123K
无效字符串示例:
!@#$%^&*!!!&H5
当用户在文本输入中输入其值时,IE8 会在控制台中抛出错误,
TypeError:无法获取属性“test”的值:对象为 null 或 undefinedundefined
IE9+、Chrome、Firefox、Safari 可按预期工作。
该逻辑作为指令实现。以下是附加到范围的核心逻辑,
scope.validate = function(value) {
// Letters and special characters not allowed per country.
var charRules = {
br: {
haveLetters: /[a-zA-Z]/,
haveSpecials: /[!@$%^&*()_+|~=`\\#{}\[\]:";'<>?,]/,
minMaxLength: /^.{12,25}$/
},
cl: {
haveLetters: /[a-jl-zA-JL-Z]/,
haveSpecials: /[!@$%^&*()_+|~=`\\#{}\[\]:";'<>?,\/]/,
minMaxLength: /^.{12,25}$/
},
mx: {
haveLetters: /[]/,
haveSpecials: /[!@$%^&*()_+|~=`\\#{}\[\]:";'<>?,\/.-]/,
minMaxLength: /^.{12,25}$/
},
pr: {
haveLetters: /[a-zA-Z]/,
haveSpecials: /[!@$%^&*()_+|~=`\\#{}\[\]:";'<>?,\/.]/,
minMaxLength: /^.{12,25}$/
}
};
if (charRules[country]) {
if (charRules[country].haveLetters.test(value) || charRules[country].haveSpecials.test(value) || !charRules[country].minMaxLength.test(value)) {
return false;
} else {
return true;
}
}
};
country
变量是全局定义的。适用于 HTML 的指令是
rut="mx"
它适用于此 HTML,
<input type="text" id="address_rut" rut="mx" class="input-xlarge" ng-switch-when="mx" ng-model="rutnumber.taxIDNumber" ng-show="editing" required>
您对导致字符串值仅在 IE8 中无法解释的原因有何看法?
2个回答
Internet Explorer 8 抛出:
Expected ']' in regular expression
当尝试在正则表达式中使用空括号时。
/[]/
您应该尝试更具体地说明您不想在其中匹配的字符 类似这样的情况,根据您的需要,您可能需要添加更多排除条件:
/[^\w^\w]/
lebobbi
2015-10-27
在上述 if 条件中,尝试
null!=charRules[country].haveLetters.exec(value) || null!=charRules[country].haveSpecials.exec(value) || (value.length>12 && value.length<25)
因为 javascript test() 在某些旧版本的 IE 中不起作用。
Kalyan
2015-10-27