2013-08-26 128 views
1

任何一个可以告诉我的正则表达式文本框不应该允许下列字符并可以接受其它特殊字符,字母,数字等:正则表达式,应该允许有限的特殊字符

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

你是指在一个文本框?你能扩展更多吗? –

+2

@ 491243你改变了你的昵称? :) – alfasin

+0

提供一些示例输入,预期的输出和正则表达式的味道。 – anubhava

回答

1

这将不允许包含在上述字符串的任何部分字符的字符串。在一行(在字符串的开头或之后的换行字符)^

  • 断言的开始

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

    简要说明

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

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

    如果你真的走黑名单路线,这里是一个例子,但要警告,语法并不简单。

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

    如果要列入白名单的所有重音字符,或许使用Unicode范围将帮助?看看这个链接。

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

    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; 
    } 
    
    相关问题