2017-03-18 116 views
1

我在我的网站中使用快速安全的联系表单。在诸如姓名,电话号码,消息等所有字段中,后端允许正则表达式。正则表达式禁止http或http://

我现在遇到垃圾邮件问题,收到大量垃圾邮件。我注意到所有包含URL的消息。所以如果我禁止字符串http或http://我认为这应该阻止垃圾邮件,因为合法邮件永远不会包含URL。

我想正则表达式如下操作:如果消息包含http,则不应发送消息。我将在消息字段的正则表达式字段中输入以完成该操作?

+0

你能澄清你用的是什么语言的正则表达式? –

回答

0

要匹配(不区分大小写),只有输入没有“HTTP”随时随地它:

^(?i)(?!.*http).* 

如果你想更精确,让"http""https",而不是跟着当"://"

^(?i)(?!.*https?://).* 

这将允许像“我们专注于https协议”的文本,但仍然阻止链接。

+0

谢谢波希米亚人,我会尝试那些。并感谢您试图保持谨慎,但我不认为任何人都会使用包含http iny消息的短语。 –

+0

如果你想*匹配*错误的输入,改变'!'为'=' – Bohemian

+0

所以,如果我匹配,这意味着只有当它包含http消息才会通过?另外,我会问你,如果它是大写的HTTP,我怎么能使它不区分大小写? –

0

如果断言不适用于您正在使用的引擎,那么您可以尝试使用旧式的POSIX风格技巧。

这只能防范http:。如果你想防范http://
这两个额外的/交替设置为他们。

^(?:[^h]|http(?:[^:]|$)|htt(?:[^p]|$)|ht(?:[^t]|$)|h(?:[^t]|$))*$

扩展(看它是什么)

^
(?: 
     [^h] 
    | 
     http 
     (?: [^:] | $) 
    | 
     htt 
     (?: [^p] | $) 
    | 
     ht 
     (?: [^t] | $) 
    | 
     h 
     (?: [^t] | $) 
)* 
$ 

如果您的引擎不支持不区分大小写,以及,这个更大的版本
应该工作。

^(?:[^hH]|[hH][tT][tT][pP](?:[^:]|$)|[hH][tT][tT](?:[^pP]|$)|[hH][tT](?:[^tT]|$)|[hH](?:[^tT]|$))*$

扩展

^
(?: 
     [^hH] 
    | 
     [hH] [tT] [tT] [pP] 
     (?: [^:] | $) 
    | 
     [hH] [tT] [tT] 
     (?: [^pP] | $) 
    | 
     [hH] [tT] 
     (?: [^tT] | $) 
    | 
     [hH] 
     (?: [^tT] | $) 
)* 
$ 
+0

我试了两个。既不可用,也不会发送消息,不管它是否包含http。并且有错误消息警告:preg_match():未知修饰符'h'in ... –

+0

@LarryAntonio - 发布代码,大到足以重现,您已经使用它显示该消息的位置。听起来像是一个分隔符问题。 – sln

+0

谢谢,我正在使用您的较大代码。我在开始的时候出现了一个斜线,最后又出现了一个斜线,这看起来很有用。我是否通过设置斜杠来做错任何事情?我不知道我在做什么,我只是凭直觉或巧合做到这一点。 –