TypeError: Unable to get value of the property 'test': object is null or undefinedundefined

TypeError: Unable to get value of the property 'test': object is null or undefinedundefined

我有一个函数可以通过一组正则表达式计算字符串。这些正则表达式作为它们自己的对象包装在 charRules.

如果字符串无效,return false,否则 return true。

示例有效字符串:1234567890123K

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

当用户在文本输入中键入他们的值时,IE8 在控制台中抛出错误,

TypeError: Unable to get value of the property 'test': object is null or 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 中无法解释的原因有任何想法吗?

在上面的if条件下,试试

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

as javascript test() 在某些旧版本的 IE 中不起作用。

Internet Explorer 8 次抛出:

Expected ']' in regular expression

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

    /[]/

您应该尝试更具体地说明您不想在其中匹配的字符 诸如此类,根据您的需要,您可能需要添加更多排除条件:

/[^\w^\w]/