Convalida di Jquery sulla corrispondenza di ‘password’ e ‘admin’ non funziona

Ho provato a scrivere un’espressione regolare per le password:

public class ApplicationUser : IdentityUser, ITimeStamps { public const string PasswordRegularExpression = @"admin|password"; // public const string PasswordRegularExpression = @"/admin|password/i"; // Tried this too // public const string PasswordRegularExpression = @"/(admin|password)/i"; // Tried this too 

Questo è oltre la normale roba di id quadro di Microsoft:

 manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = false, RequireDigit = true, RequireLowercase = false, RequireUppercase = false, }; 

Ecco il mio modello di visualizzazione del registro:

 public class RegisterViewModel { [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "Password")] [RegularExpression( ApplicationUser.PasswordRegularExpression, ErrorMessage = "The {0} must contain atleast 1 number and must not contain the word 'admin' or 'password'" )] public string Password { get; set; } [DataType(DataType.Password)] [Display(Name = "Confirm password")] [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] public string ConfirmPassword { get; set; } } 

Sto volendo lanciare un errore nella validazione jquery quando qualcuno usa password o admin all’interno della propria password. Tuttavia, la convalida jquery non sembra funzionare come previsto. Cosa potrei mancare?

L’html generato da asp.net ha il seguente aspetto:

      

    Casi test:

    • Ho aggiunto parentesi, non funziona ancora come previsto. Digito la password e in realtà non fallisce! Poi metto un altro carattere (non importa di cosa si tratta) e poi fallisce … e ora rimuovo parte della parola “password”, così per esempio “pasrd21234” e l’errore è ancora lì!

    Note a margine:

    • Ho provato a usarlo per testarlo: http://regexhero.net/tester/ e la regex sembra funzionare bene lì?
    • Ho anche provato a usarlo per testarlo: http://regexpal.com/ e funziona bene?

    Basato sulla risposta all’espressione regolare per abbinare una linea che non contiene una parola? , la seguente espressione regolare dovrebbe corrispondere a qualsiasi password tranne se contiene “admin” o “password”:

     ^((?!(admin|password)).)*$ 

    Ho creato un violino per questo su Regex101 per i test prima di aggiungere questo nella tua applicazione.