programing

Ruby 정규식의 \A \z와 ^ $ 간의 차이

easyjava 2023. 6. 3. 08:50
반응형

Ruby 정규식의 \A \z와 ^ $ 간의 차이

내가 읽은 설명서에서:

\A와 \z를 사용하여 문자열의 시작과 끝을 일치시키고, ^과 $는 줄의 시작/끝을 일치시킵니다.

나는 사용자가 제출한 사용자 이름(또는 이메일이 동일)을 확인하기 위해 정규 표현을 적용할 것입니다.어떤 표현과 함께 사용해야 합니까?validates_format_of모델로?저는 그 차이를 이해할 수 없습니다.저는 항상 ^과 $를 사용했습니다.

유효성 검사를 위해 정규식을 사용하는 경우 항상\A그리고.\z.^그리고.$새 줄 문자까지만 일치합니다. 즉, 다음과 같은 이메일을 사용할 수 있습니다.me@example.com\n<script>dangerous_stuff();</script>정규식은 이전의 모든 것만 보기 때문에 여전히 유효합니다.\n.

제가 추천하는 것은 사전에 사용자 이름이나 이메일에서 새로운 줄을 완전히 제거하는 것입니다. 왜냐하면 그것에 대한 정당한 이유는 거의 없기 때문입니다.그러면 두 가지 중 하나를 안전하게 사용할 수 있습니다.\A \z또는^ $.

Pickaxe에 따르면:

^줄의 시작 부분과 일치합니다.

$줄의 끝과 일치합니다.

\A문자열의 시작 부분과 일치합니다.

\z문자열의 끝과 일치합니다.

\Z문자열이 다음으로 끝나지 않는 한 문자열의 끝과 일치합니다."\n"그것이 바로 직전에 일치하는 경우."\n".

그래서, 사용합니다.\A소문자\z사용하는 경우\Z누군가가 새로운 라인 캐릭터를 몰래 들여올 수도 있습니다.이것은 위험하지 않다고 생각하지만, 문자열에 공백이 없다고 가정하는 알고리즘을 망칠 수 있습니다.정규식 및 문자열 길이 제약 조건에 따라 새 줄 문자만 포함된 보이지 않는 이름을 사용할 수 있습니다.

JavaScript의 Regex 처리 구현\A문자 그대로'A'(ref). 그러니까 밖에서 조심해서 테스트해 보세요.

예제별 차이

  1. /^foo$/다음 중 하나와 일치합니다./\Afoo\z/하지 않음:
whatever1
foo
whatever2
foo
whatever2
whatever1
foo
  1. /^foo$/그리고./\Afoo\z/모두 다음과 일치합니다.
foo

문자열의 시작과 끝이 반드시 줄의 시작과 끝과 같을 필요는 없습니다.다음을 테스트 문자열로 사용했다고 가정해 보십시오.

나의
이름.
이라
앤드루

문자열에 많은 줄이 포함되어 있습니다.^그리고.$문자를 사용하면 해당 줄의 시작과 끝을 일치시킬 수 있습니다(예: 다음과 같이 처리).\n반면에, delimeter로서의 성격.\A그리고.\Z전체 문자열의 시작과 끝을 일치시킬 수 있습니다.

언급URL : https://stackoverflow.com/questions/577653/difference-between-a-z-and-in-ruby-regular-expressions

반응형