2013-08-26 88 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; 
    } 
    
    相關問題