0

奇妙なシナリオがあります。現在のパスワード、新しいパスワード、および新しいパスワードの確認フィールドを含むフォームがあります。

  • 現在のパスワードが必要です。
  • ユーザーが変更しない限り、新しいパスワードは必要ありません。変更する場合は、正規表現の要件 ( ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*\"]).{6,16}?$) を満たす必要があります。
  • 新しいパスワードを確認する必要はありませんが、新しいパスワードと一致します。

以下は、MVC cshtml フックアップです。

     <li>
       <label for="Password" class="required">Current Password</label>
          @Html.TextBoxFor(m => m.UserInfoData.Password, new
             {
                 @type = "password",
                 @class = "k-textbox",
                 @placeholder = "Current Password",
                 @validationmessage = "Current Password Required!",
                 @required = "required"
              })
      </li>
      <li>
         <label for="NewPassword" class="required">New Password</label>
            @Html.TextBoxFor(m => m.UserInfoData.NewPassword, new
               {
                  @type = "password",
                  @class = "k-textbox",
                  @placeholder = "New Password",
                  @required = "required",
                  @pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*\"]).{6,16}?$",                                        
               })
     </li>
     <li>
         <label for="ConfirmNewPassword" class="required">Confirm New Password</label>
            @Html.TextBoxFor(m => m.UserInfoData.ConfirmNewPassword, new
               {
                  @type = "password",
                  @class = "k-textbox",
                  @placeholder = "Confirm New Password",
                  @verifypasswords = string.Empty
                })
   </li>

   <li class="confirm">
      <button class="k-button k-primary" type="submit" id="submitSetingsData">Update Details</button>
   </li>

以下は、剣道検証を使用した jQuery 接続です。

$("#settings").kendoValidator({
        rules: {                
            verifyPasswords: function (input) {
                var result = true;
                if (input.is("[name=UserInfoData.ConfirmNewPassword]")) {
                    result = input.val() === $("#UserInfoData_NewPassword").val();
                }
                return result;
            }
        },
        messages: {                
            verifyPasswords: "New passwords do not match!"
        }
    });

検証は正常に機能していますが、新しいパスワード フィールドをオプションにすることはできません。HTML5 パターンには が必要requiredですが、このフィールドをオプションにしたいです。ユーザーが空白のままにすると検証をチェックしませんが、ユーザーが入力を行う場合は正規表現に準拠する必要があります。私は?正規表現の最後に使用しましたが、オプションにはしていません。剣道の検証またはhtml5に関する可能な解決策またはヒントは非常に高く評価されます。ありがとうございました。

4

1 に答える 1

1

おそらく、正規表現に「または空です」を追加します。

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*\"]).{6,16}?$|^$

|手段ORおよびビットは、^$空の文字列に対して検証します。正規表現バリデーターで試してみたところ、文字列を空のままにするか、指定した正規表現と互換性のあるパターンを使用すると、肯定が返されました。

于 2016-01-24T17:59:50.960 に答える