1

複数の言語で検証したい以下のフォームがあると考えてください。

<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、特殊文字が明確に含まれていますが、有効です。

これらの問題を解決するには??

どんな助けでも大歓迎です!!!

ありがとう

4

1 に答える 1

1

すべての正しい値を指定する代わりに、すべての間違った値を指定できます。

すべての間違った文字を含む正規表現を作成します。

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

この正規表現は、すべての間違った文字を探します。

ng-patternは正の正規表現を与えることを期待しているため、実行をオーバーライドする必要がありますng-pattern

jsfiddle のライブ例。

angular.module('ExampleApp', [])
  .controller('ExampleController', function($scope) {
    $scope.myPt = {
      regExp: /[@!#$%^&*()\-+={}\[\]|\\/'";:`.,~№?<>]+/i,
      test: function(val) {
        console.log(val);
        return !this.regExp.test(val);
      }
    };
  });
<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>

PS間違った記号を忘れたのかもしれません。必要に応じて、正規表現を単純に展開できます。

于 2016-04-05T11:37:07.370 に答える