谁能告诉我文本字段的正则表达式,它不应该允许以下字符,并且可以接受其他特殊字符、字母、数字等:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ @ &
这将不允许字符串包含上述字符串的任何部分中的任何字符。
^(?!.*[+\-&|!(){}[\]^"~*?:@&]+).*$
简要说明
^
(?!.*[+\-&|!(){}[\]^"~*?:@&]+)
.*
*
[+\-&|!(){}[\]^"~*?:@&]+
+
+
\-
&|!(){}[” «&|!(){}[
\]
^"~*?:@&” «^"~*?:@&
.*
*
$
通常最好将您允许的字符列入白名单,而不是将您不允许的字符列入黑名单。无论是从安全的角度来看,还是从易于实施的角度来看。
如果你确实走黑名单路线,这里有一个例子,但要注意,语法并不简单。
http://groups.google.com/group/regex/browse_thread/thread/0795c1b958561a07
如果您想将所有重音字符列入白名单,也许使用 unicode 范围会有所帮助?看看这个链接。
我认为这些是 Solr 需要转义的字符。如果是这种情况,并且如果您使用 PHP 进行编码,那么您应该使用我在 Github 上的PHP 实用程序函数。这是那里的 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;
}