2

6桁の数字のみを受け入れるこのコードがあります:

<input
   ng-pattern="{{widget.regex}}" 
   name="{{widget.id}}">
{{widget.regex}}

<span ng-if="(myForm[item.id].$touched === true && myForm[item.id].$valid === false)" class="help-block">
    <div ng-message="pattern">Enter 6 digit ID</div>
</span>

正規表現値は、次のように JSON ファイルから設定されています。

{
  "items": [
    {
      "id": "customerID",
      "label": "Enter ID",
      "required": "yes",
      "regex": "/^[0-9]{6,6}$/i"
    },
    {
      "id": "customerEmail",
      "label": "Email",
      "required": "yes"
    }
  ]
},

出力は次のとおりです。

ここに画像の説明を入力

問題は、ID フィールドに 6 桁の数字を入力しても、エラー メッセージが消えないことです。入力した数字は機能しません。ng-patternただし、正規表現を次のように属性にハードコーディングした場合:

<input
   ng-pattern="/^[0-9]{6,6}$/i" 
   name="{{widget.id}}">
{{widget.regex}}

<span ng-if="(myForm[item.id].$touched === true && myForm[item.id].$valid === false)" class="help-block">
    <div ng-message="pattern">Enter 6 digit ID</div>
</span>

ここに画像の説明を入力

それが動作します!エラーメッセージは消えます。また、次のようにコントローラーからテストしました。

vm.regex = new RegExp('/^[0-9]{6,6}$/i');

それも機能しません。誰が問題が何であるか知っていますか?助けてください、事前に感謝します。

4

1 に答える 1

1

RegExp コンストラクターは、次の 2 つの方法で表現できます。

new RegExp('ab+c', 'i');   //string notation
new RegExp(/ab+c/i);   //literal regex notation

文字列表記には / 文字が含まれていませんが、リテラル表記には含まれていることに注意してください。

/ 文字が含まれている場合、ng-pattern は自動的に文字列入力をリテラル表記に変換します。/ 文字で囲まれていない文字列を検出すると、^ および $ 文字で囲みます。たとえば"abc"、 に変換されますnew RegExp('^abc$')が、"/abc/i"に評価されnew RegExp(/abc/i)ます。

参考文献:

于 2016-09-11T04:44:00.743 に答える