답변:
유효성 검사를 위해 정규식에 의존하는 경우 항상 \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는 전체 문자열의 시작과 끝을 일치시킬 수 있습니다.