Programming

암호에 대한 정규식은 8 자 이상, 하나 이상의 숫자 및 소문자와 특수 문자를 모두 포함해야합니다.

procodes 2020. 2. 29. 15:35
반응형

암호에 대한 정규식은 8 자 이상, 하나 이상의 숫자 및 소문자와 특수 문자를 모두 포함해야합니다.


정규식으로 확인하고 싶습니다.

비밀번호는 하나 이상의 숫자를 포함하여 8 자 이상이며 소문자와 대문자 및 특수 문자 (예 : #, ?)를 포함 !합니다.

이전 비밀번호이거나 사용자 이름 "password", 또는"websitename"

그리고 여기 대문자 1 개, 소문자 1 개, 숫자 또는 특수 문자를 포함하여 8 개의 문자에 대한 유효성 검증 표현식이 있습니다.

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

암호로 쓰려면 대문자, 특수 문자 및 영숫자를 포함하여 8 자 여야 합니까?


최소 8 자, 하나 이상의 문자와 하나의 숫자 :

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

최소 8 자, 하나 이상의 문자, 하나의 숫자 및 하나의 특수 문자 :

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

최소 8 자, 하나 이상의 대문자, 하나의 소문자 및 하나의 숫자 :

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

최소 8 자, 하나 이상의 대문자, 하나의 소문자, 하나의 숫자 및 하나의 특수 문자 :

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"

최소 8 자 및 최대 10 자, 하나 이상의 대문자, 하나의 소문자, 하나의 숫자 및 하나의 특수 문자 :

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"

이 정규식을 여러 개의 미리보기 어설 션 (조건) 과 함께 사용할 수 있습니다 .

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

이 정규 표현식은 다음 규칙을 시행합니다.

  • 적어도 하나의 대문자 영어 편지 ,(?=.*?[A-Z])
  • 영문 소문자 1 자 이상 (?=.*?[a-z])
  • 적어도 하나의 숫자 (?=.*?[0-9])
  • 하나 이상의 특수 문자 (?=.*?[#?!@$%^&*-])
  • 최소 길이 8 .{8,}(앵커 포함)

정규 표현식에는 AND 연산자가 없으므로 유효성이 무언가 다른 것으로 정의되고 다른 것에 의해 정의 될 때 유효한 암호와 일치하는 정규 표현식을 작성하는 것은 매우 어렵습니다 ...

그러나 정규 표현식에는 OR 연산자가 있으므로 DeMorgan 정리를 적용하고 유효하지 않은 비밀번호와 일치하는 정규식을 작성하십시오.

8 자 미만으로 무엇이든 또는 어떤 번호가 무엇이든 또는 어떤 대문자 무엇이든 또는 어떤 소문자 또는 아무것도 또는 특수 문자 아무것도.

그래서:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

일치하는 것이 있으면 잘못된 암호입니다.


@anubhava의 대답에 대한 작은 개선 사항 : 특수 문자는 키보드의 문자로 제한되므로 특수 문자에 이것을 사용하십시오.

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

이 정규 표현식은 다음 규칙을 시행합니다.

  • 하나 이상의 대문자 영어
  • 하나 이상의 소문자 영문
  • 하나 이상의 숫자
  • 하나 이상의 특수 문자
  • 최소 길이 8

내 상황에서 가장 인기있는 답변을 따르는 데 어려움이있었습니다. 예를 들어, 내 검증은 다음과 같은 문자로 실패했다 ;[. 나는 특수 문자를 화이트리스트에 [^\w\s]올리는 데 관심이 없었기 때문에 대신 단어가 아닌 문자 (숫자를 포함)와 공백이 아닌 문자를 테스트로 사용했습니다. 요약하면 다음과 같습니다.

  • 최소한 8문자
  • 1숫자 이상
  • 적어도 1소문자
  • 적어도 1대문자
  • 적어도 1특별한 성격

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSFiddle Link- 다양한 사례를 다루는 간단한 데모


JavaScript 파일을 가져옵니다 jquery.validate.min.js.

이 방법을 사용할 수 있습니다 :

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. 하나 이상의 대문자 영어
  2. 하나 이상의 소문자 영문
  3. 하나 이상의 숫자
  4. 하나 이상의 특수 문자

같은 없음 영어 글자 수보다 "일반적인"버전 (?), 특수 문자 .

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
  
  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });


이걸로 해봐:

  1. 최소 6 자
  2. 적어도 하나의 대문자
  3. 하나 이상의 소문자
  4. 하나 이상의 특수 문자

표현:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

선택적 특수 문자 :

  1. 하나 이상의 특수 문자
  2. 하나 이상의 숫자
  3. 특수 문자는 선택 사항입니다
  4. 최소 6 자 및 최대 16 자

표현:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

최소 및 최대 조건이 필요하지 않은 경우 제거 .{6, 16}

  • 6 은 글자 수 한도입니다
  • 최대 글자 수 제한은 20 입니다
  • ? = 는 일치 식을 의미

Peter Mortensen에게 답장을했지만 평판이 충분하지 않습니다.

그의 표현은 지정된 각 최소 요구 사항에 완벽합니다. 특수 문자가 필요없는 그의 표현의 문제점은 특수 문자도 허용하지 않기 때문에 최대 요구 사항을 적용한다는 점입니다. OP가 요청한 것으로 생각하지 않습니다. 일반적으로 사용자는 원하는만큼 비밀번호를 강력하게 만들 수 있습니다. 왜 강력한 암호를 제한해야합니까?

따라서 그의 "최소 8 자, 적어도 하나의 문자와 하나의 숫자"표현 :

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

최소 요구 사항을 달성하지만 나머지 문자는 문자와 숫자 가능합니다. 특수 문자를 허용하려면 (그러나 필수는 아님) 다음과 같은 것을 사용해야합니다.

^(?=.*[A-Za-z])(?=.*\d).{8,}$ 모든 문자를 허용

또는

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$ 특정 특수 문자를 허용

마찬가지로 "최소 8 자, 하나 이상의 대문자, 하나의 소문자 및 하나의 숫자 :"

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

최소 요구 사항을 충족하지만 문자와 숫자 허용합니다. 사용하다:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ 모든 문자를 허용

또는

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,} 특정 특수 문자를 허용합니다.


Use the following Regex to satisfy the below conditions:

Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.

Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/    

질문에 직접 대답하지는 않지만 실제로 정규식이어야합니까?

나는 Perl을 많이 사용했고 정규 표현식 문제를 해결하는 데 익숙했습니다. 그러나 모든 미리보기 및 기타 단점으로 인해 더 복잡해지면 작은 버그를 모두 죽이기 위해 수십 개의 단위 테스트를 작성해야합니다.

또한 정규 표현식은 일반적으로 명령 또는 기능 솔루션보다 몇 배 느립니다.

예를 들어, 다음 (FP가 아닌) 스칼라 함수는 가장 인기있는 답변의 정규식보다 약 3 배 빠른 원래 질문을 해결합니다. 또한 단위 테스트가 전혀 필요하지 않습니다.

def validatePassword(password: String): Boolean = {
  if (password.length < 8)
    return false

  var lower = false
  var upper = false
  var numbers = false
  var special = false

  password.foreach { c =>
    if (c.isDigit)       numbers = true
    else if (c.isLower)  lower = true
    else if (c.isUpper)  upper = true
    else                 special = true
  }

  lower && upper && numbers && special
}

필요에 따라이 패턴은 제대로 작동합니다. 이 시도,

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

문자열 변수를 만들고 패턴을 지정한 다음 패턴이 올바른 경우 true를 반환하고 그렇지 않으면 false를 반환하는 부울 메서드를 만듭니다.

견본:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"

private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}

(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}

@ClasG는 이미 다음을 제안했습니다 .

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

그러나 _ (밑줄)을 특수 문자 (예 : Aa12345_)로 허용하지 않습니다.

개선 된 것은 다음과 같습니다.

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$

나는 여기에서 많은 문제를 발견했고, 나는 내 자신을 만들었다.

다음은 테스트를 통해 영광입니다.

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/DCRR65/4/tests

주의 사항 :

  1. 내가 테스트하고있는를 \w포함 하기 때문에 사용하지 않습니다 _.
  2. 줄의 끝과 일치하지 않고 기호를 일치시키는 데 많은 문제가있었습니다.
  3. 기호를 구체적으로 지정하지 않으면 키보드마다 사용하는 로케일마다 다른 기호가있을 수 있기 때문입니다.

다음 정규식을 사용하여 아래 조건을 충족하십시오.

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

정규식 : ^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$

온라인 테스트 가능 : https://regex101.com


HTML5를 사용하면됩니다.

아래 코드를 패턴 속성에 사용하십시오.

pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

완벽하게 작동합니다.


아래 정규식 패턴을 사용하여 비밀번호가 예상과 일치하는지 여부를 확인할 수 있습니다.

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})

Java / Android에서 하나 이상의 숫자, 하나의 문자, 하나의 특수 문자를 사용하여 다음 패턴으로 비밀번호를 테스트합니다.

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

이 시도:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

이 정규 표현식은 완벽하게 작동합니다.

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}

적어도 1 개의 대문자, 1 자리 및 모든 특수 문자와 8-63 사이의 길이와 일치하는 패턴.

"^ (? =. [az]) (? =. [AZ]) (? =. * \ d) [a-zA-Z \ d \ W] {8,63} $"

이 패턴은 JAVA 프로그래밍에 사용되었습니다.


아래의 작동을 바랍니다. Azure 사용자 지정 정책에서 시도했습니다.

^ (? =. [az]) (? =. [AZ]) (? =. \ d) (? =. [@ # $ % ^ & * -_ + = [] {} | \ : ',? / ~&quot;();!])([A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/~ "() ;!] |. (?! @)) {6,16} $


(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

온라인 링크 확인 https://regex101.com/r/mqGurh/1


나는 실제로 여기에 첫 번째 대답을 복사하여 하나의 대문자, 하나의 문자, 최소 8 문자가 필요하지만 "사이에있는"모든 항목을 허용 하는보다 편리한 ux 정규식 으로 바꿨습니다 .

이것은 예제 정규식입니다.

  1. 8 자 이상
  2. 하나 이상의 소문자
  3. 적어도 하나의 대문자

중요 :이 정규식 은 다른 모든 문자 (예 : 숫자, $, #,와 같은 특수 문자)를 제외한 다른 문자도 제외합니다. -규칙 1에서 3까지만 입력 문자열과 일치

^(?=.*[a-z])(?=.*[A-Z]).{8,}$

"."마음 정규 표현식이 끝날 때마다 엉뚱한. 이것은 거의 모든 (그리고 읽을 수있는) 문자와 일치합니다


이전 답변 중 하나에서 찾은 솔루션은 다음과 같습니다.

최소 8 자 이상 대문자 알파벳 1 개, 소문자 알파벳 1 개, 숫자 1 개 및 특수 문자 1 개 : "^ (? =. [az]) (? =. [AZ]) (? =. \ d) (? =. [ $ @ $! % ? &]) [A-Za-z \ d $ @ $! % ? &] {8,} "

... 나에게는 효과가 없었지만 다음은 단순화 된 버전이며 훌륭하게 작동합니다 (좋아하는 특수 문자 추가, 여기에 # 추가). 문자와 마찬가지로 숫자 규칙을 추가하십시오.

"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}"

참고 URL : https://stackoverflow.com/questions/19605150/regex-for-password-must-contain-at-least-eight-characters-at-least-one-number-a



반응형