Javascript TypeError:无法获取属性的值';测试';:对象为null或未定义

Javascript TypeError:无法获取属性的值';测试';:对象为null或未定义,javascript,angularjs,internet-explorer,internet-explorer-8,Javascript,Angularjs,Internet Explorer,Internet Explorer 8,我有一个通过一组正则表达式计算字符串的函数。这些正则表达式被包装为charRules中自己的对象 如果字符串无效,则返回false,否则返回true 有效字符串示例:12345678901233K 无效字符串示例:!@$%^&*&H5 当用户在文本输入中输入值时,IE8在控制台中抛出一个错误 TypeError:无法获取属性“test”的值:对象为null或未定义 IE9+、Chrome、Firefox和Safari都能正常工作 该逻辑作为指令实现。这是与范围相关的核心逻辑

我有一个通过一组正则表达式计算字符串的函数。这些正则表达式被包装为
charRules
中自己的对象

如果字符串无效,则返回false,否则返回true

有效字符串示例:
12345678901233K

无效字符串示例:
!@$%^&*&H5

当用户在文本输入中输入值时,IE8在控制台中抛出一个错误

TypeError:无法获取属性“test”的值:对象为null或未定义

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;
                            }
                        }
                    };
scope.validate=函数(值){
//每个国家/地区不允许使用字母和特殊字符。
var charRules={
比尔:{
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}$/
},
公共关系:{
haveLetters:/[a-zA-Z]/,
haveSpecials://[!@$%^&*()\\\\\\[\]:“;”?,\/.]/,
minMaxLength:/^.{12,25}$/
}
};
如果(charRules[国家]){
if(charRules[country].haveLetters.test(value)| | charRules[country].haveSpecials.test(value)| | |!charRules[country].minMaxLength.test(value)){
返回false;
}否则{
返回true;
}
}
};
country
变量是全局定义的。适用于HTML的指令是
rut=“mx”

它适用于这个HTML


关于什么原因导致字符串值不能仅在IE8中解释,您有什么想法吗?

在上述if条件下,请尝试

null!=charRules[country].haveLetters.exec(value) || null!=charRules[country].haveSpecials.exec(value) || (value.length>12 && value.length<25)

null=charRules[country].haveLetters.exec(值)| | null=charRules[country].haveSpecials.exec(value)| |(value.length>12&&value.lengthInternet explorer 8抛出:

正则表达式中应为']'

尝试在正则表达式中使用空括号时

    /[]/
您应该尝试更具体地使用不希望在其中匹配的字符 诸如此类,根据您的需要,您可能需要添加更多排除条件:

/[^\w^\w]/

这个解决方案是合理的。谢谢你的建议。请投票+