首页 > 解决方案 > 正则表达式:将html模式正则表达式转换为js格式

问题描述

我只想让这个功能工作:


    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



附加信息

我有一个 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>

现在我需要一个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"

我很抱歉,您可能很难理解代码并试图提供一些帮助。测试也很复杂。如果有人提出建议,我会很高兴。

标签: javascripthtmlregexphone-number

解决方案


我也检查了 python 脚本,在 * )?(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

推荐阅读