Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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
Javascript 正则表达式修改_Javascript_Asp.net_Regex - Fatal编程技术网

Javascript 正则表达式修改

Javascript 正则表达式修改,javascript,asp.net,regex,Javascript,Asp.net,Regex,我有一个asp.net应用程序,其中有一个URL文本框。我使用正则表达式进行验证。我的正则表达式是这样的:^(ht | f)tp(s?):\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)**)(\/?)([a-zA-Z0-9\-\.\?,\'/\\+%\$\\\\\+++&;%\$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 但是现在我有一个增强功能,比如文本总是保留http://

我有一个asp.net应用程序,其中有一个URL文本框。我使用正则表达式进行验证。我的正则表达式是这样的:
^(ht | f)tp(s?):\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)**)(\/?)([a-zA-Z0-9\-\.\?,\'/\\+%\$\\\\\+++&;%\$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


但是现在我有一个增强功能,比如文本总是保留http://的文本。此时,此表达式的验证必须忽略默认文本(http://)。怎么可能呢?请帮助我解决此问题。

您的表达式与
http://
部分匹配,因此它“保留”了该部分匹配。如果要验证的文本框根本不包含该部分,只需从正则表达式中删除
(ht|f)tp(s?\:\/\/

如果它是文本框的一部分,但在匹配后要忽略它,则可以在预期匹配的周围加上捕获括号。您的原始正则表达式将如下所示:

^(ht|f)tp(s?)\:\/\/([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?)$
现在,没有
http://
ftp://
等的零件将位于反向参考编号3中

这就是说,您现在的正则表达式非常糟糕,而且也不正确(大量不必要的转义、不必要的括号、构造错误的字符类(带有端口号的URL在这里将失败),我非常确定您不希望
&;
出现在其中)

使用正则表达式验证URL并不容易。你的意图是什么?什么应该有效,什么不应该有效?

你可以试试这个-

在正则表达式的开头使用
((ht | f)tp(s?\:\/\/)?
,使http://或ftp://成为可选的

你的完整正则表达式是-

^((ht|f)tp(s?)\:\/\/)?[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$

但是如果它在那里,它仍然会被匹配,因此不会像Dilse Naaz期望的那样被忽略。@Tim-我理解这个问题是匹配没有http://etc的URL。你可能是对的,在这种情况下,我认为我们需要从正则表达式中删除
^((ht|f)tp(s?:\/\/)?
。但正如您所提到的,它仍然是不正确的,因为还有很多其他不必要的转义,所以我不确定OP为什么需要忽略来自regex match的http://from。如果它始终可用并且当前正则表达式正在工作,那么为什么要从正则表达式中删除或忽略http://etc呢。我认为这方面没有任何与绩效相关的问题,对吗?你的假设是正确的。。我需要用于验证http:///后面部分的表达式。因为http//文本总是显示。@Dilse-不确定我是否理解正确。您不想验证http://对吗?然后你可以删除我在给Tim的评论中提到的第一部分。虽然保留在正则表达式中也不重要,对吗?我不明白您为什么要删除http://validation。拥有它总是很好的。我想要用于验证http://后面部分的表达式。因为http//文本始终显示。您的意思是它在文本框之外吗?那么,从正则表达式中删除这一部分,正如我在回答的第一句中所概述的。