>  기사  >  웹 프론트엔드  >  비밀번호 강도를 구현하는 두 가지 JS 정규식 방법

비밀번호 강도를 구현하는 두 가지 JS 정규식 방법

小云云
小云云원래의
2018-03-19 10:16:133746검색

이 문서에서는 비밀번호 강도를 위한 두 가지 정규식 구성표, 즉 간단한 방법과 더 복잡하고 안전한 방법을 제공합니다. 그리고 두 솔루션의 분석 및 테스트 절차가 각각 제공됩니다. 일반적으로 프로젝트의 실제 요구 사항에 따라 자신만의 비밀번호 규칙을 정의할 수 있습니다.

머리말

사용자가 등록할 때 비밀번호 규칙성 확인이 사용됩니다. 올바른 정규 표현식을 작성하려면 먼저 표현식 규칙을 정의해야 합니다.

옵션 1(단순)

비밀번호 확인이 다음과 같이 정의되어 있다고 가정합니다.

  • 최소 6자리, 최대 16자리 {6,16}

  • 에는 소문자 [a-z] 및 대문자 [A-Z]

  • 는 숫자 [0-9]를 포함할 수 있습니다. 리터럴 정의 다음과 같습니다.

  • var pattern = /^[\w_-]{6,16}$/;

시나리오 1 분석


Literal / /

정규 표현식의 리터럴은 슬래시(/) 쌍 사이에 포함된 문자로 정의됩니다. 예:

var pattern = /s$/;

위 리터럴은 문자 "s"로 끝나는 모든 문자열과 일치합니다.

문자 클래스 [ ]


문자를 대괄호 안에 넣어 문자 클래스를 구성하세요. 문자 클래스는 포함된 모든 문자와 일치할 수 있습니다. 따라서 정규식 /[abc]/는 "a", "b" 또는 "c" 문자와 일치합니다.

문자 클래스는 하이픈을 사용하여 문자 범위를 나타낼 수 있습니다. 라틴 소문자를 일치시키려면 /[a-z]/ 를 사용하세요.

Character 클래스 w

Character 클래스 w는 [a-zA-Z0-9]에 해당하는 ASCII 문자로 구성된 모든 단어와 일치합니다.

[w_-]는 라틴어 대문자 및 소문자, 숫자, 밑줄 및 빼기 기호를 일치시키는 것을 의미합니다.

Repeat {}

정규 표현식에서 { }를 사용하여 요소가 반복되는 횟수를 나타냅니다.

{n,m}은 이전 항목과 최소 n번 일치하지만 m번 이하입니다.

{n,}는 이전 항목과 n번 이상 일치합니다.

  • {n}은 이전 항목과 일치합니다. item 항목 n번

  • [w_-]{6,16}은 라틴 대문자와 소문자, 숫자, 밑줄, 빼기 기호가 최소 6회에서 최대 16회 나타나는 것을 의미합니다.
  • 위치 일치

  • ^ 문자열의 시작과 일치, 여러 줄 검색에서 줄의 시작과 일치
$ 문자열의 끝과 일치, 여러 줄 검색에서 줄의 끝과 일치

/^w/는 대문자나 소문자 또는 숫자로 시작하는 문자열과 일치합니다.

플랜 1 테스트



테스트 결과는 다음과 같습니다.

var pattern = /^[\w_-]{6,16}$/;
pattern.test('123456') = true;
pattern.test('-ifat33') = true;
pattern.test('42du') = false;
pattern.test('du42du42du42du421') = false;
pattern.test('42du42@') = false;
소스코드 보기

테스트 결과에 따르면, 플랜 1은 비밀번호를 잠깐만 제한하고, 비밀번호를 설정할 수 없는 것을 알 수 있습니다. 비밀번호의 강도와 계정 보안을 보장합니다.


옵션 2(보안)

비밀번호 확인이 다음과 같이 정의되어 있다고 가정합니다.

최소 6자리, 최대 16자리 {6,16}

1을 포함해야 합니다. number

  • 소문자 2개 포함

  • 대문자 2개 포함

  • 특수문자 1개 포함

  • 위의 규칙에 따르면 다음과 같이 일반 리터럴 정의를 쉽게 제공할 수 있습니다. :

  • var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;

시나리오 2 분석


Character 클래스.

Character 클래스. 줄바꿈 및 기타 유니코드 줄 종결자를 제외한 모든 문자를 나타냅니다.

정방향 예측 어설션(?= )

"(?=" 및 ")" 기호 사이에 표현식을 추가합니다. 이는 괄호 안의 식이 올바르게 일치해야 함을 나타내는 예측 어설션입니다. 예를 들어, /Java(?=:)/는 Java와만 일치할 수 있으며 뒤에는 콜론이 옵니다.

이 미리보기 어설션은 특수 문자가 포함되어야 함을 나타냅니다. 위 수식의 특수문자 10개는 키보드 1, 2...0의 상단 쉬프트키 문자이며, 다른 특수문자도 추가 가능합니다. 참고: 추가된 문자가 정규식에서 특별한 의미를 갖는 경우 기호 앞에 백슬래시()를 사용하여 이스케이프해야 합니다.

옵션 2 테스트

(?=.*[!@#$%^&*?()])

테스트 결과는 다음과 같습니다.

var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;
pattern.test('du42DU!') = true;
pattern.test('duDUd!') = false;
pattern.test('42dud!') = false;
pattern.test('42DUD!') = false;
pattern.test('42duDU') = false;
pattern.test('42duU(') = false;
pattern.test('42dUU!') = false;
관련 권장사항:

JS 네이티브 객체 및 정규식에 대한 자세한 설명


JavaScript 정규식 팁

PHP 정규 표현식 요약

위 내용은 비밀번호 강도를 구현하는 두 가지 JS 정규식 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.