답변:
유효성 검사를 위해 정규식에 의존하는 경우 항상 \A
및 을 사용하려고합니다 \z
. ^
그리고 $
그들 만이 같은 이메일을 사용할 수있는 수단 개행 문자까지 일치 me@example.com\n<script>dangerous_stuff();</script>
와 정규식 만 전에 모든 것을 볼 수 있기 때문에 여전히이 검증 있습니다 \n
.
내 추천은 정당한 이유가 없기 때문에 미리 사용자 이름이나 이메일에서 새로운 줄을 완전히 제거하는 것입니다. 그런 다음 EITHER \A
\z
또는을 안전하게 사용할 수 있습니다 ^
$
.
\z
대신 작은 문자가 있어야합니다 \Z
!
$
대신 "문자열 끝"을 확인 하면 무시됩니다 \z
.
에 따르면 곡괭이 :
^
줄의 시작과 일치합니다.
$
줄의 끝을 찾습니다.
\A
문자열의 시작과 일치합니다.
\z
문자열의 끝과 일치합니다.
\Z
문자열이로 끝나지 않는 한 문자열의 끝과"\n"
일치합니다"\n"
. 이 경우 문자열이 바로 앞과 일치합니다 .
따라서 \A
소문자를 사용하십시오 \z
. \Z
누군가 를 사용 하면 줄 바꿈 문자가 생길 수 있습니다. 이것은 내가 생각하는 위험하지는 않지만 문자열에 공백이 없다고 가정하는 알고리즘을 망칠 수 있습니다. 정규식 및 문자열 길이 제약 조건에 따라 누군가 줄 바꿈 문자와 함께 보이지 않는 이름을 사용할 수 있습니다.
JavaScript의 Regex 구현은 \A
리터럴 'A'
( ref ) 로 취급 됩니다 . 그러니 거기서 조심하고 테스트하십시오.
문자열의 시작과 끝이 반드시 줄의 시작과 끝과 같을 필요는 없습니다. 테스트 문자열로 다음을 사용했다고 상상해보십시오.
내
이름
은
앤드류입니다
공지 사항 문자열은 많은 라인을 가지고 - ^
및 $
문자는 (기본적으로 치료 그 라인의 시작과 끝과 일치 할 수 있도록 \n
하는 동안 분리 문자로 문자를) \A
하고 \Z
는 전체 문자열의 시작과 끝을 일치시킬 수 있습니다.