使用angularjs和ngPattern验证UTF-8名称

时间:2014-10-23 02:31:22

标签: javascript regex angularjs

有没有办法在表单验证中使用ng-pattern来验证来自任何字母(拉丁语,中文,韩语,俄语......)的任何字母

我找到了一个使用XRegExp库的解决方案,但不能使用ng-pattern,因为它需要一个字符串正则表达式。

XRegExp("^\\p{L}[\\p{L} ']*$")

一个解决方案是构建我自己的验证器指令,但如果可能的话,我更愿意使用ng-pattern。

3 个答案:

答案 0 :(得分:0)

您仍然可以在ng-pattern中使用该正则表达式。您只需将正则表达式文字作为字符串传递:

ng-pattern="/^\\p{L}[\\p{L} ']*$/"  

答案 1 :(得分:0)

ng-pattern="/^.{3,20}$/"

允许任何字符(包括utf-8)和限制3-20个字符,或

ng-pattern="/^.[^*?&]{3,20}$/"

允许任何字符并限制4-20个字符,除了*?& (添加更多字符除外)

答案 2 :(得分:0)

我建议使用自定义指令属性,对我来说效果很好。 例如,下面我们不允许ngModel的中文字符。

function translationModelPatternDirective() {
        return {
            restrict: 'A',
            require: 'ngModel',
            link: function(scope, elem, attrs, ngModel) {
                if (!ngModel) {
                    return;
                }
                var regExp = XRegExp('\p{Han}');

                scope.$watch(function() {
                    return ngModel.$modelValue;
                }, function(newValue, oldValue) {
                    if (!regExp.test(newValue)) {
                        ngModel.$setViewValue(newValue);
                    } else {
                        ngModel.$setViewValue(oldValue);
                        ngModel.$render();
                    }
                });
            }
        };
    }