기호와 일치시킬 정규식: !$%^&*()_+|~-='{}[]:",'<>?,/
다음 문자를 포함하는 문자열을 테스트하는 JavaScript에서 Regex 테스트를 만들려고 합니다.
!$%^&*()_+|~-=`{}[]:";'<>?,./
관심이 있다면 더 많은 정보 :)
제가 하고 있는 꽤 멋진 비밀번호 변경 애플리케이션을 위한 것입니다.만약 당신이 관심이 있다면 여기 나머지 코드가 있습니다.
암호 요구 사항을 나열하는 테이블이 있는데 최종 사용자가 새 암호를 입력할 때 정규식 배열을 테스트하고 다음과 같은 경우 해당 테이블 행에 체크 표시를 합니다.체크아웃 :) 저는 단지 이것을 4번째 항목 대신에 추가하면 됩니다.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 테이블을 사용하여 문자 클래스의 범위를 찾습니다.
정답.
/[\W\S_]/
설명.
이렇게 하면 단어 문자, 공백 문자를 제거하고 밑줄 문자를 다시 추가하는 문자 클래스가 만들어집니다(언더스코어는 "단어" 문자).남은 것은 특별한 캐릭터들뿐입니다.대문자는 소문자의 부정을 나타냅니다.
\W
다음과 동일한 "단어"가 아닌 모든 문자를 선택합니다.[^a-zA-Z0-9_]
\S
다음과 동일한 "공백" 문자가 아닌 모든 문자를 선택합니다.[ \t\n\r\f\v]
_
"_"를 선택합니다. 왜냐하면 우리는 그것을 사용할 때 부정하기 때문입니다.\W
그리고 그것을 다시 추가해야 합니다.
이를 위한 가장 간단하고 빠른 방법은 다음과 같습니다.
/[^\p{L}\d\s@#]/u
설명.
[^...]
아래 목록에 없는 단일 문자와 일치
\p{L}
=> 모든 언어의 문자와 일치합니다.\d
=> 0에서 9까지의 숫자와 일치합니다.\s
=> 보이지 않는 모든 종류의 문자와 일치합니다.@#
=>@
그리고.#
성격.
패스하는 것을 잊지 마세요.u
깃발
이를 달성하는 간단한 방법은 음수 집합 [^\w\s]입니다.이는 기본적으로 다음과 같습니다.
- 영숫자(문자 및 숫자)가 아닌 모든 문자
- 공백, 탭 또는 줄 바꿈이 아닌 모든 항목(일반적으로 공백이라고 함)
어떤 이유에서인지 [\W\S]는 동일한 방식으로 작동하지 않으며 필터링도 수행하지 않습니다.답변 중 하나에 대한 자엘의 논평은 설명을 제공합니다.
// 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);
};
@prefix-hillman 답변을 기반으로, 이것은 완전한 버전입니다.
/[\\@#$-/:-?{-~!"^_`\[\]]/
테스트
function noSpecialChars(str) {
const match = str.match(/[\\@#$-/:-?{-~!"^_`\[\]]/)
if (!match) return
throw new Error("got unsupported characters: " + match[0])
}
// prettier-ignore
const symbols = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", ".", ":", ";", "|","~","`","{","}","[","]","\"","'","<",">","?","/", "\\"]
symbols.forEach((s) => {
it(`validates no symbol ${s}`, async () => {
expect(() => {
noSpecialChars(s)
}).toThrow();
})
})
어때는 요?(?=\W_)(?=\S).
문자가 일치하는지 확인합니다..
문자가 . (단, 단문단다아니닙가자어단(,다▁(,_
공백이 아님을 나타냅니다.
참고: @Casimir et Hippolyte가 다른 댓글에서 지적했듯이, 이것은 또한 é와 같은 문자와 일치할 것입니다.이러한 캐릭터를 기대하지 않는다면 이것이 효과적인 해결책입니다.
언급URL : https://stackoverflow.com/questions/8359566/regex-to-match-symbols
'source' 카테고리의 다른 글
SVG 요소에 클릭 시 이벤트 추가 (0) | 2023.08.13 |
---|---|
도커에서 컨테이너와 이미지의 차이점은 무엇입니까? (0) | 2023.08.13 |
사용할 올바른 구문은 MariaDB 서버 버전에 해당하는 설명서를 확인하십시오. (0) | 2023.08.13 |
mysql 명령에서 bash에 선언된 변수를 가장 잘 사용하려면 어떻게 해야 합니까? (0) | 2023.08.13 |
ASP.NET 이상한 컴파일 오류 (0) | 2023.08.13 |