正则表达式,不允许两个连续的特殊字符

时间:2016-01-06 13:23:55

标签: regex

我要做的是允许两个连续的特殊字符,例如$ip = "202.142.178.220"; $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip)); //get ISO2 country code if(property_exists($ipdat, 'geoplugin_countryCode')) { echo $ipdat->geoplugin_countryCode; } //get country full name if(property_exists($ipdat, 'geoplugin_countryName')) { echo $ipdat->geoplugin_countryName; } &**$,但它应该允许在&&之类的字符串之间使用特殊字符。

到目前为止我尝试了什么:

Hello%Mr&

2 个答案:

答案 0 :(得分:5)

^(?!.*[\%\/\\\&\?\,\'\;\:\!\-]{2}).*$

我们的想法是使用negative lookahead(?!))来验证字符串(.*)中是否存在连续两个" special" 个字符([...]{2})。之后,您只需匹配整个字符串(.*)。

答案 1 :(得分:0)

您可以使用这种模式:

\A\W?(?>\w+\W)*\w*\z

\A[%/\\&?,';:!-]?(?>[^%/\\&?,';:!-]+[%/\\&?,';:!-])*[^%/\\&?,';:!-]*\z

\A[^\p{L}\p{N}\s]?(?>[\p{L}\p{N}\s]+[^\p{L}\p{N}\s])*[\p{L}\p{N}\s]*\z

\A[^a-zA-Z0-9 ]?(?>[a-zA-Z0-9 ]+...

取决于你称之为“特殊角色”。