ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • regex : html 패턴 regex를 js 형식으로 변환
    카테고리 없음 2020. 8. 19. 15:20

    질문

    이 기능이 작동하도록하고 싶습니다.

    
        function ausPhoneValidate(str){if (/^(?:\\+?(61))? ?(?:\\((?=.*\\)))?(0?[2-57-8])\\)? ?(\\d\\d(?:[- ](?=\\d{3})|(?!\\d\\d[- ]?\\d[- ]))\\d\\d[- ]?\\d[- ]?\\d{3})$/.test(str)){return true;}return false;}
    

    다음 정규식을 사용하여 :

    
        pattern="^(?:\+?(61))? ?(?:\((?=.*\)))?(0?[2-57-8])\)? ?(\d\d(?:[- ](?=\d{3})|(?!\d\d[- ]?\d[- ]))\d\d[- ]?\d[- ]?\d{3})" 
    

    이 바이올린 JSfiddle 을 확인하세요.



    Additional Information

    호주 전화를 확인하는 HTML 정규식이 있습니다.

      <div>
        <input class='rform-input' type="text" id="phone" name="phone" required placeholder=" " pattern="^(?:\+?(61))? ?(?:\((?=.*\)))?(0?[2-57-8])\)? ?(\d\d(?:[- ](?=\d{3})|(?!\d\d[- ]?\d[- ]))\d\d[- ]?\d[- ]?\d{3})" />
        <label for="last_name">Phone number</label>
        <div class="requirements">
            Please enter an Australia phone number. 
        </div>
      </div>

    이제 Australia Phone의 유효성을 검사하려면 JS 함수가 필요하지만이 함수를 문자열로 작성해야합니다. 그러면 element.innerHTML = ''를 호출하여 페이지에 구현합니다. 내가 가진 것은 다음과 같습니다.

    function script_render(scr){return `<script type="text/javascript">document.getElementById("booking-p-submit").addEventListener("click", ()=>{${scr}})</script>`;}
    
    function users_script(){
        var str = '';
        // str += `function emailValidate(str){if (/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(str)){return true;}return false;}`;
        // str += `if(!emailValidate(document.getElementById('email-input').value)){document.getElementById('wform-error').innerHTML = 'Invalid Email'};`;
    
        str += `function ausPhoneValidate(str){if (/^(?:\\+?(61))? ?(?:\\((?=.*\\)))?(0?[2-57-8])\\)? ?(\\d\\d(?:[- ](?=\\d{3})|(?!\\d\\d[- ]?\\d[- ]))\\d\\d[- ]?\\d[- ]?\\d{3})$/.test(str)){return true;}return false;}`
        str += `if(!ausPhoneValidate(document.getElementById('phone-input').value)){document.getElementById('wform-error').innerHTML = 'Invalid Phone'};`;
        return script_render(str);
    }

    내가해온 줄은 이메일에 대한 유효성 검사입니다. 백 슬래시를 이스케이프 처리 했으므로 제대로 작동하지만 두 번째 부분을 실행하면 SyntaxError : Invalid regular expression : unmatched parentheses "

    코드를 이해하고 도움을 제공하는 것이 매우 어려울 수 있다는 점에 대해 사과드립니다. 또한 테스트는 복잡합니다. 누군가가 제안을한다면 너무 기뻐할 것입니다.


    답변1

    )? (0? [2-57-8]) \ 뒤에 추가 (아마도) ')'를 썼습니다.이 시도

    function script_render(scr){return `<script type="text/javascript">document.getElementById("booking-p-submit").addEventListener("click", ()=>{${scr}})</script>`;}
    
    function users_script(){
        var str = '';
        // str += `function emailValidate(str){if (/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/.test(str)){return true;}return false;}`;
        // str += `if(!emailValidate(document.getElementById('email-input').value)){document.getElementById('wform-error').innerHTML = 'Invalid Email'};`;
    
        str += `function ausPhoneValidate(str){if (/^(?:\\+?(61))? ?(?:\\((?=.*\\)))?(0?[2-57-8])\\? ?(\\d\\d(?:[- ](?=\\d{3})|(?!\\d\\d[- ]?\\d[- ]))\\d\\d[- ]?\\d[- ]?\\d{3})$/.test(str)){return true;}return false;}`
        str += `if(!ausPhoneValidate(document.getElementById('phone-input').value)){document.getElementById('wform-error').innerHTML = 'Invalid Phone'};`;
        return script_render(str);
    }


    답변2

    나는 또한 파이썬 script로 확인했다, * )? (0? [2-57-8]) * py에서 이것을 실행 한 뒤에 추가 ')'가있다

    t="^(?:\+?(61))? ?(?:\((?=.*\)))?(0?[2-57-8])\)? ?(\d\d(?:[- ](?=\d{3})|(?!\d\d[- ]?\d[- ]))\d\d[- ]?\d[- ]?\d{3})"
    print(list(t).count('('), 
    list(t).count(')'))
    
    c1, c2=0, 0
    for i,c in enumerate(list(t)):
        if c=='(':
            c1+=1
        elif c==')':
            c2+=1
        
        if c2>c1:
            print(t[i:i+10])
            print(i)
            break


     

     

     

     

    출처 : https://stackoverflow.com/questions/63422082/regex-convert-html-pattern-regex-into-js-format

    댓글

Designed by Tistory.