>  Q&A  >  본문

JavaScript 정규식을 PHP로 변환

이 질문을 수십 번 정도 받은 것으로 알고 있지만 기술적으로는 사기가 아닙니다(원하시면 다른 질문도 확인하세요) ;)

기본적으로 저는 프론트엔드 검증을 위해 이메일 주소를 확인하는 Javascript 정규식이 있고, 예를 들어 프론트엔드 검증이 제대로 작동하지 않는 경우(브라우저 문제)에 대비해 CodeIgniter를 사용하여 백엔드를 다시 확인합니다. ) 이것은 상당히 긴 정규식이므로 수동으로 변환을 어디서 시작해야 할지 모르겠습니다.

JS 정규식을 PHP 정규식으로 변환하는 도구를 찾고 있습니다. - 비슷한 질문에 대한 답변에서는 찾지 못했습니다(물론 그러한 도구가 존재하지 않을 수도 있습니다.) 글쎄, 나는 거짓말을 했습니다. - 그들 중 한 명이 39.95달러의 비용이 드는 도구를 제안했지만 단일 표현식을 변환하는 데 그렇게 많은 비용을 지출하고 싶지는 않습니다. (아니요, 위 질문에 대한 답변에서 제안한 것처럼 무료 평가판은 없습니다.)

이것은 aSeptik에서 제공하는 Javascript 표현식입니다:

으아악

CodeIgniter에서 사용하는 것도 있는데 동일한 규칙을 따르지 않기 때문에 사용하고 싶지 않습니다(특정 유효한 주소를 허용하지 않음):

으아악

PHP에서 Javascript 정규식으로 설정된 동일한 규칙을 사용하고 싶습니다.

내 프런트엔드 코드에서는 이메일 주소가 정상이라고 말하고 Codeigniter에서는 아니오라고 말하는 불일치가 있는데, 이는 물론 제가 앱에서 수정하려고 하는 동작입니다.

모든 팁에 감사드립니다! :D

P粉465675962P粉465675962382일 전857

모든 응답(2)나는 대답할 것이다

  • P粉966979765

    P粉9669797652023-10-24 17:52:14

    Javascript와 PHP의 정규식 엔진에는 몇 가지 차이점이 있습니다. 정규식 엔진 비교를 확인하세요. 기사는 이론적 지식을 제공하고, PHP 정규 표현식과 JavaScript 정규 표현식의 차이점 답변은 실용적인 정보를 제공합니다.

    대부분의 경우 약간의 수정만으로 PHP에서 Javascript 정규식 패턴을 사용할 수 있습니다. 근본적인 차이점으로, PHP 정규식은 다음과 같이 문자열(또는 문자열 내)로 정의됩니다.

    으아악

    Javascript 정규식은 그렇지 않으며 자체 방식으로 정의됩니다.

    으아악

    PHP에서 정규식을 실행하여 시험해 볼 수 있습니다. Codeigniter 파일에서는 교체하지 않는 것이 좋습니다. 간단히 네이티브 라이브러리를 확장하거나 교체하면 됩니다. 자세한 내용은 라이브러리 만들기를 확인하세요.

    회신하다
    0
  • P粉462328904

    P粉4623289042023-10-24 14:21:23

    이 문제를 예상보다 더 좋은 방법으로 해결할 수 있었습니다. 사용하고 싶은 Javascript 정규식을 변환할 수 없어서(RegexBuddy를 구입한 후에도 - 유용했을 텐데 올바른 변환이 이루어지지 않음) Regex 확인된 이메일 주소 웹사이트를 확인하기로 결정했습니다. 그리고 그들이 무엇을 하고 있는지 살펴보세요. 좋은 정규식에 대한 제안이 있나요? 그때 제가 이것을 발견했습니다:

    "지금까지 가장 높은 점수를 받은 표현은 PHP에서 사용하는 표현입니다 filter_var()":

    으아악

    4/86 오류만 일치했는데 제가 사용한 Javascript는 8/86 오류와 일치했으므로 PHP 쪽이 더 정확합니다. 그래서 CodeIgniter Form_validation 库,改为使用 return filter_var($str, FILTER_VALIDATE_EMAIL);를 확장했습니다.

    ...하지만 Javascript에서는 작동하나요?

    으아악

    징! 기적적으로 작동합니다! 프런트엔드와 백엔드 검증 사이에서 찾고 있던 일관성을 얻었을 뿐만 아니라 그 과정에서 더 정확한 정규식도 얻었습니다. 윈윈!

    제안해주신 모든 분들께 감사드립니다!

    회신하다
    0
  • 취소회신하다