1

谁能告诉我文本字段的正则表达式,它不应该允许以下字符,并且可以接受其他特殊字符、字母、数字等:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ @ &
4

3 回答 3

1

这将不允许字符串包含上述字符串的任何部分中的任何字符。

^(?!.*[+\-&|!(){}[\]^"~*?:@&]+).*$

简要说明

  • 在行首断言位置(在字符串的开头或换行符之后)^
  • 断言不可能从这个位置开始匹配下面的正则表达式(负前瞻(?!.*[+\-&|!(){}[\]^"~*?:@&]+)
    • 匹配任何不是换行符的单个字符.*
      • 在零次和无限次之间,尽可能多次,根据需要回馈(贪婪)*
    • 匹配下面列表中的单个字符[+\-&|!(){}[\]^"~*?:@&]+
      • 一次和无限次之间,尽可能多次,按需回馈(贪婪)+
      • 字符“+”+
      • 一个人物\-
      • 人物之一&|!(){}[” «&|!(){}[
      • 一个人物\]
      • 人物之一^"~*?:@&” «^"~*?:@&
  • 匹配任何不是换行符的单个字符.*
    • 在零次和无限次之间,尽可能多次,根据需要回馈(贪婪)*
  • 在行尾断言位置(在字符串末尾或换行符之前)$
于 2013-08-26T05:56:58.380 回答
0

通常最好将您允许的字符列入白名单,而不是将您不允许的字符列入黑名单。无论是从安全的角度来看,还是从易于实施的角度来看。

如果你确实走黑名单路线,这里有一个例子,但要注意,语法并不简单。

http://groups.google.com/group/regex/browse_thread/thread/0795c1b958561a07

如果您想将所有重音字符列入白名单,也许使用 unicode 范围会有所帮助?看看这个链接。

http://www.regular-expressions.info/unicode.html

于 2013-08-26T05:56:50.303 回答
0

我认为这些是 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;
}
于 2013-08-26T06:21:13.750 回答