Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#regex不';我不能在Javascript中工作_Javascript_Regex_Backslash_Xregexp - Fatal编程技术网

C#regex不';我不能在Javascript中工作

C#regex不';我不能在Javascript中工作,javascript,regex,backslash,xregexp,Javascript,Regex,Backslash,Xregexp,我使用以下正则表达式验证电子邮件: ^[a-zA-Z0-9!$'*+/\-_#%?^`&=~}{|]+(\.[a-zA-Z0-9!$'*+/\-_#%?^`&=~}{|]+)*@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-['&_\]]]+)(\.[\w-['&_\]]]+)*))(\]?)$ 这在C#中运行良好,但在JavaScript中,它不起作用。。。。是的,我用双反斜杠替换了每个反斜杠,如下所示: ^[

我使用以下正则表达式验证电子邮件:

^[a-zA-Z0-9!$'*+/\-_#%?^`&=~}{|]+(\.[a-zA-Z0-9!$'*+/\-_#%?^`&=~}{|]+)*@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-['&_\]]]+)(\.[\w-['&_\]]]+)*))(\]?)$
这在C#中运行良好,但在JavaScript中,它不起作用。。。。是的,我用双反斜杠替换了每个反斜杠,如下所示:

^[a-zA-Z0-9!$'*+/\\-_#%?^`&=~}{|]+(\\.[a-zA-Z0-9!$'*+/\\-_#%?^`&=~}{|]+)*@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-['&_\\]]]+)(\\.[\\w-['&_\\]]]+)*))(\\]?)$
我正在使用XRegExp。我是不是遗漏了什么?是否有一个转换器可以将普通正则表达式转换为JavaScript(也许:)

以下是我的功能:

 function CheckEmailAddress(email) {
     var reg = new XRegExp("^[a-zA-Z0-9!$'*+/\\-_#%?^`&=~}{|]+(\\.[a-zA-Z0-9!$'*+/\\-_#%?^`&=~}{|]+)*@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-['&_\\]]]+)(\\.[\\w-['&_\\]]]+)*))(\\]?)$")

     if (reg.test(email) == false) {
         return false;
     }

     return true;
 }
对于一个简单的“abc@123.com“电子邮件地址

提前谢谢


Kevin

问题在于正则表达式包含。JavaScript的
RegExp
不支持它们,也不支持
XRegExp
。(我最初记错了,并评论说是的,但事实并非如此。)

但是,字符类减法可以替换为负lookaheads,因此:

[\w-['&_\\]]]
可以变成这样:

(?:(?!['&_\\]])\\w)
这两个词都表示“任何单词字符,但在集合
”&
中没有一个”。表达式
\w
'
&
]
不匹配,因此我们可以简化为:

(?:(?!_)\\w)
[A-Za-z0-9]
或者,由于
\w
[A-Za-z0-9\
,我们可以从列表中删除下划线,并进一步简化为:

(?:(?!_)\\w)
[A-Za-z0-9]
最后一个RegExp是:

new RegExp("^[a-zA-Z0-9!$'*+/\\-_#%?^`&=~}{|]+(\\.[a-zA-Z0-9!$'*+/\\-_#%?^`&=~}{|]+)*@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([A-Za-z0-9]+)(\\.[A-Za-z0-9]+)*))(\\]?)$")
我已经用这个RegExp做了适度的测试,但是您应该对检查它进行尽职调查


严格来说,简化正则表达式并不需要经过负先行步骤,但知道字符类减法可以替换为负先行减法在更一般的情况下很有用,因为手动简化很困难或很脆弱。

对反斜杠进行转义意味着您匹配的是文字“`。。。JS正则表达式与PCRE正则表达式非常相似,但稍微简单一些。您不应该使用正则表达式验证电子邮件地址。这不可能做到。。。没有人能用一个正则表达式验证所有有效的电子邮件地址。。。哦,那你为什么要使用XRegExp,而不是简单的正则表达式呢?你认为我如何在客户端验证电子邮件格式?你没有。您可以执行一些基本验证(例如:输入是否包含
@
符号),但数据验证是在服务器端完成的否我无法承受无效的电子邮件格式。。。所以回到我的问题上来。我的正则表达式怎么了?为什么不?您没有执行任何服务器端验证吗?因为那是你负担不起的。。。不验证用户输入服务器sideWow,这是一个很好的答案。你研究正则表达式有多久了?我已经使用正则表达式很多年了。我也使用正则表达式很长时间了,但我自己从来没有使用过这个功能。我听说过,但我没有看到这个问题在这里很少构造+1.