Pac*_*ier 6 javascript c# vb.net web-services
我有这条VBNet代码,我想将其翻译成javascript:
Dim phone_check_pattern = "^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.//-]|\([ 0-9.//-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.//-]|\([ 0-9.//-]+\)))?$"
System.Diagnostics.Debug.WriteLine(System.Text.RegularExpressions.Regex.IsMatch("test input", phone_check_pattern))
Run Code Online (Sandbox Code Playgroud)
我的翻译结果:
var phone_check_pattern = "^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.//-]|\([ 0-9.//-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.//-]|\([ 0-9.//-]+\)))?$";
alert(new RegExp(phone_check_pattern).test("test input"))
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它有错误 Uncaught SyntaxError: Invalid regular expression:: Nothing to repeat
(我的VbNet代码没有任何错误)
有谁知道是什么导致了这个问题?
在JavaScript字符串中的反斜杠字符是一个转义字符,让你有反斜杠在字符串中的转义下一个字符的字符串,而不是正则表达式.所以就在接近开头的时候,在你"^(\+?的反斜杠中,只是逃避了+ 字符串(它不需要),而正则表达式看到的只是一个+没有重复的原始内容.因此错误.
幸运的是,JavaScript有正则表达式的字面语法(用/字符分隔),这可能是一个更好的起点:
var re = /^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.\/-]|\([ 0-9.\/-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.\/-]|\([ 0-9.\/-]+\)))?$/;
alert(re.test("test input"));
Run Code Online (Sandbox Code Playgroud)
然后至少反斜杠在正则表达式中逃逸,而不是字符串.(注意,因为/是正则表达式文字的分隔符,我们必须将其转义(使用反斜杠).)
我没有详尽地审查实际的正则表达式,但这应该让你开始.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |