[javascript] 기호와 일치하는 정규식 :! $ % ^ & * () _ + | ~-=`{} [] : “; ‘<>?,. /

다음 문자를 포함하는 문자열을 테스트하는 JavaScript에서 Regex 테스트를 만들려고합니다.

!$%^&*()_+|~-=`{}[]:";'<>?,./

관심이 있다면 더 많은 정보 🙂

제가 작업중인 아주 멋진 암호 변경 응용 프로그램입니다. 관심이있는 경우 나머지 코드는 여기에 있습니다.

암호 요구 사항을 나열한 테이블이 있고 최종 사용자가 새 암호를 입력하면 정규식 배열을 테스트하고 해당 테이블 행에 체크 표시를합니다. 체크 아웃합니다. :)이 항목을 추가하면됩니다. validation배열 의 네 번째 항목 대신 .

var validate = function(password){
    valid = true;

    var validation = [
        RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password),
        RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password),
        !RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password),
        !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7)
    ]

    $.each(validation, function(i){
        if(this)
            $('.form table tr').eq(i+1).attr('class', 'check');
        else{
            $('.form table tr').eq(i+1).attr('class', '');
            valid = false
        }
    });

    return(valid);

}

예, 해당 서버 측 유효성 검사도 있습니다!



답변

이것에 대한 정규식은 정말 간단합니다. 문자 클래스를 사용하십시오. 하이픈은 문자 클래스의 특수 문자이므로 첫 번째 여야합니다.

/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/

다른 정규식 메타 문자도 이스케이프해야합니다.

편집 :
하이픈은 문자 범위를 나타내는 데 사용할 수 있으므로 특별합니다. 이 동일한 문자 클래스는 다음과 같은 범위로 단순화 할 수 있습니다.

/[$-/:-?{-~!"^_`\[\]]/

세 가지 범위가 있습니다. ‘$’에서 ‘/’로, ‘:’에서 ‘?’로, ‘{‘에서 ‘~’로. 마지막 문자열은! “^ _`[] 범위로 더 간단하게 표현할 수 없습니다.

ACSII 테이블 을 사용하여 문자 클래스의 범위를 찾습니다.


답변

이를 수행하는 가장 간단하고 짧은 방법 :

/[^\p{L}\d\s@#]/u

설명

[^...] 아래 목록에없는 단일 문자와 일치

  • \p{L} => 모든 언어의 모든 종류의 문자와 일치

  • \d => 0에서 9까지의 숫자와 일치

  • \s => 모든 종류의 보이지 않는 문자와 일치

  • @# => @#문자

u(unicode) 플래그 를 전달하는 것을 잊지 마십시오 .


답변

대답

/[\W\S_]/

설명

이것은 단어 문자, 공백 문자를 제거하고 밑줄 문자를 다시 추가하는 문자 클래스를 만듭니다 (밑줄은 “단어”문자이므로). 남은 것은 특수 문자뿐입니다. 대문자는 해당 소문자의 부정을 나타냅니다.

\W에 해당하는 “단어”가 아닌 모든 문자 [^a-zA-Z0-9_]
\S를 선택합니다.에 해당하는 “공백”이 아닌 모든 문자 [ \t\n\r\f\v]
_를 선택합니다.를 사용할 때 “_”를 무효화 \W하고 다시 추가해야하기 때문입니다.


답변

// The string must contain at least one special character, escaping reserved RegEx characters to avoid conflict
  const hasSpecial = password => {
    const specialReg = new RegExp(
      '^(?=.*[!@#$%^&*"\\[\\]\\{\\}<>/\\(\\)=\\\\\\-_´+`~\\:;,\\.€\\|])',
    );
    return specialReg.test(password);
  };


답변

이를 달성하는 간단한 방법은 음수 세트 [^ \ w \ s]입니다. 이것은 본질적으로 다음을 포착합니다.

  • 영숫자가 아닌 모든 것 (문자 및 숫자)
  • 공백, 탭 또는 줄 바꿈이 아닌 모든 항목 (통칭하여 공백이라고 함)

어떤 이유로 [\ W \ S]는 같은 방식으로 작동하지 않으며 어떤 필터링도 수행하지 않습니다. 답변 중 하나에 대한 Zael의 의견은 설명을 제공합니다.


답변

‘A’의 모든 언어에서 후자를 모두 바꾸고 예를 들어 모든 숫자를 0으로 바꾸려면 :

return str.replace(/[^\s!-@[-`{-~]/g, "A").replace(/\d/g, "0");


답변