开发者问题收集

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