javascript - 正则表达式:将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"
我很抱歉,您可能很难理解代码并试图提供一些帮助。测试也很复杂。如果有人提出建议,我会很高兴。
解决方案
我也检查了 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
推荐阅读
- open-liberty - How to setup an EJB timerDataSource in Open Liberty
- ios - Responsive navbar font-size works on a PC but not on iPhone
- html - Rowspan and colspan not proper in table
- apache-storm - 阿帕奇风暴 1.1.0
- javascript - Create an instance of an object with the help of function (dynamically), on event triggers
- azure - 获取当前状态而不是时间范围
- c# - 如何避免此代码中的堆栈溢出异常?
- c# - 如何放置预制件,然后在查看时通过语音将其移除
- spring-boot - 如何在 Apache Ignite、sfl4j 或 log4j 中配置日志记录
- c# - How to connect to IoT Edge System Module using IoT Device SDK