如何处理多种语言的表单验证(特殊字符):AngularJS?

时间:2016-04-04 07:12:29

标签: javascript angularjs validation special-characters multiple-languages

考虑我有以下表格,我想验证多种语言。

<form ng-submit="vm.transferCommunity()" name="transferCommunityForm">
<input type="text" class="form-control" name="transferCommunityLogin" ng-model="vm.transferCommunity.login" ng-pattern="/^[a-zA-Z0-9-_ ]+$/" >
<button type="submit" class="btn btn-default" ng-disabled="(transferCommunityForm.transferCommunityLogin.$invalid && !transferCommunityForm.transferCommunityLogin.$pristine)">Button</button>

<div ng-messages="transferCommunityForm.transferCommunityLogin.$error" ng-if="transferCommunityForm.transferCommunityLogin.$invalid">
  <div class="alert alert-danger" ng-message="pattern">Special Characters are not allowed</div>
</div>
</form>

我验证表单的当前模式[ng-pattern="/^[a-zA-Z0-9-_ ]+$/"]。 它适用于英语,但对于日语,中文,法语,德语等语言,它会显示错误信息。

例如,当翻译为法语时,英语中的单词Reference变为Référence,并且它显然包含特殊字符,但其有效。

如何解决这些问题??

任何帮助表示赞赏!!!

谢谢

1 个答案:

答案 0 :(得分:0)

您可以指定所有错误的值,而不是指定所有正确的值。

创建一个包含所有错误字符的正则表达式。

例如:/[@!#$%^&*()\-+={}\[\]|\\/'";:.,~№?<>]+/i

此正则表达式将查找所有错误的字符。

由于ng-pattern希望我们提供正面的正则表达式,我们需要覆盖执行ng-pattern

jsfiddle上的实例。

&#13;
&#13;
angular.module('ExampleApp', [])
  .controller('ExampleController', function($scope) {
    $scope.myPt = {
      regExp: /[@!#$%^&*()\-+={}\[\]|\\/'";:`.,~№?<>]+/i,
      test: function(val) {
        console.log(val);
        return !this.regExp.test(val);
      }
    };
  });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="ExampleApp">
  <div ng-controller="ExampleController">
    <form name="myForm">
      <input ng-model="firstName" name="firstName" ng-pattern="myPt" required>
      <br>firstName = <pre>{{myForm.firstName.$error|json}}</pre>
    </form>
  </div>
</div>
&#13;
&#13;
&#13;

P.S。也许我忘记了一些错误的符号。如果需要,您可以简单地展开正则表达式。