簡體   English   中英

正則表達式的角度模式驗證

[英]Angular pattern validation with regex

我需要做一個密碼模式驗證器

密碼應具有:

  • 1個大寫字母
  • 1個小寫字母
  • 一個號碼
  • 最小長度為8。

我發現此正則表達式模式:

Validators.pattern('/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!$%@#£€*?&]')

但是,驗證器始終聲稱我的輸入無效

errors:    
   pattern:
      actualValue: "Test1234"
      requiredPattern: "^/^(?=.*[A-Za-z])(?=.*d)[A-Za-zd!$%@#£€*?&]$"

根據https://regex101.com/r/AfAdKp/1,該值應該是有效的。

編輯:澄清一下,Test1234應該工作

您當前的正則表達式存在多個問題:

  1. 您的正則表達式沒有字符類的量詞
  2. Validators.pattern不需要定界符,但是您一開始就扔了一個定界符
  3. 您應該將轉義令牌加倍。

您需要的是:

Validators.pattern('^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=\\D*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$');

在這里觀看現場演示

您必須添加量詞[A-Za-z\\d!$%@#£€*?&]{8,}重復字符類至少8次,並將大寫和小寫字符的斷言分開:

Validators.pattern('^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$')

^(?=.*[AZ])(?=.*[az])(?=.*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$

  • ^在字符串開頭聲明位置
  • (?=.*[AZ])積極向前看,斷言其后是大寫字符
  • (?=.*[az])積極向前看,斷言其后是小寫字符
  • (?=.*\\d)積極向前看,斷言其后是一個數字
  • [A-Za-z\\d!$%@#£€*?&]{8,}匹配角色類別中的任何角色8次或更多次
  • $在行尾聲明位置

 const strings = [ "A88888jf", "Aa88888jf", "Aa888jf", "AAAAAAAAAAA", "aaaaaaaaaaaaaa", "2222222222222222", "1sAdfe44", "$#fd#######" ]; let pattern = /^(?=.*[AZ])(?=.*[az])(?=.*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$/; strings.forEach((s) => { console.log(s + " ==> " + pattern.test(s)); }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM