[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");