正则表达式,应该允许有限的特殊字符

时间:2013-08-26 05:51:37

标签: regex

任何人都可以告诉我textfield的正则表达式,它不允许跟随字符,并且可以接受其他特殊字符,字母,数字等:

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

3 个答案:

答案 0 :(得分:1)

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

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

简要说明

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

答案 1 :(得分:0)

通常情况下,将您允许的字符列入白名单通常会更好,而不是将您不允许的字符列入黑名单。从安全角度和易于实施的角度来看都是如此。

如果您确实进入黑名单路线,这是一个示例,但要注意,语法并不简单。

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

如果要将所有重音字符列入白名单,可能使用unicode范围会有帮助吗?看看这个链接。

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

答案 2 :(得分:0)

我认为这些是需要为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;
}