任何一个可以告诉我的正则表达式文本框不应该允许下列字符并可以接受其它特殊字符,字母,数字等:正则表达式,应该允许有限的特殊字符
+ - && || ! () { } [ ]^" ~ * ? : \ @ &
任何一个可以告诉我的正则表达式文本框不应该允许下列字符并可以接受其它特殊字符,字母,数字等:正则表达式,应该允许有限的特殊字符
+ - && || ! () { } [ ]^" ~ * ? : \ @ &
这将不允许包含在上述字符串的任何部分字符的字符串。在一行(在字符串的开头或之后的换行字符)^
^(?!.*[+\-&|!(){}[\]^"~*?:@&]+).*$
简要说明
(?!.*[+\-&|!(){}[\]^"~*?:@&]+)
.*
*
[+\-&|!(){}[\]^"~*?:@&]+
+
+
\-
&|!(){}[” «&|!(){}[
\]
^"~*?:@&” «^"~*?:@&
的.*
*
$
它通常更好地将您允许的字符列入白名单,而不是将您不允许的字符列入黑名单。无论是从安全的角度,还是从实现的角度来看。
如果你真的走黑名单路线,这里是一个例子,但要警告,语法并不简单。
http://groups.google.com/group/regex/browse_thread/thread/0795c1b958561a07
如果要列入白名单的所有重音字符,或许使用Unicode范围将帮助?看看这个链接。
我认识到那些需要为Solr转义的字符。如果是这种情况,并且如果您使用PHP编码,那么您应该使用Github上的我的PHP utility functions。这里是从那里的Solr功能之一:
/**
* Escape values destined for Solr
*
* @author Dotan Cohen
* @version 2013-05-30
*
* @param value to be escaped. Valid data types: string, array, int, float, bool
* @return Escaped string, NULL on invalid input
*/
function solr_escape($str)
{
if (is_array($str)) {
foreach ($str as &$s) {
$s = solr_escape($s);
}
return $str;
}
if (is_int($str) || is_float($str) || is_bool($str)) {
return $str;
}
if (!is_string($str)) {
return NULL;
}
$str = addcslashes($str, "+-!(){}[]^\"~*?:\\");
$str = str_replace("&&", "\\&&", $str);
$str = str_replace("||", "\\||", $str);
return $str;
}
你是指在一个文本框?你能扩展更多吗? –
@ 491243你改变了你的昵称? :) – alfasin
提供一些示例输入,预期的输出和正则表达式的味道。 – anubhava