正则表达式:将html模式正则表达式转换为js格式

时间:2020-08-15 02:42:41

标签: javascript html regex phone-number

我只想使此功能正常工作:


    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函数来验证Australia Phone,但是,我需要将此函数编写为字符串,然后调用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"

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

2 个答案:

答案 0 :(得分:0)

您在)之后写了多余的(也许是')'?(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);
}

答案 1 :(得分:0)

我也用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
相关问题