1

次の文字を許可してはならず、他の特殊文字、アルファベット、数字などを受け入れることができるテキストフィールドの正規表現を教えてください。

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

3 に答える 3

1

これにより、上記の文字列のどの部分にも文字を含む文字列は許可されません。

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

簡単な説明

  • 行頭の位置をアサートする (文字列の先頭または改行文字の後)^
  • この位置から始まる以下の正規表現に一致することは不可能であると断言します (否定先読み)(?!.*[+\-&|!(){}[\]^"~*?:@&]+)
    • 改行文字以外の任意の 1 文字に一致.*
      • 0 回から無制限の範囲で、必要に応じて何度でもお返しします (貪欲)*
    • 以下のリストに存在する単一の文字に一致する[+\-&|!(){}[\]^"~*?:@&]+
      • 1回から無制限の間で、何度でも、必要に応じて恩返しをする(貪欲)+
      • 文字「+」+
      • キャラクター\-
      • 登場人物の一人&|!(){}[” «&|!(){}[
      • キャラクター\]
      • 登場人物の一人^"~*?:@&” «^"~*?:@&
  • 改行文字以外の任意の 1 文字に一致.*
    • 0 回から無制限の範囲で、必要に応じて何度でもお返しします (貪欲)*
  • 行末の位置をアサートする (文字列の末尾または改行文字の前)$
于 2013-08-26T05:56:58.380 に答える
0

これらは、Solr でエスケープする必要がある文字として認識しています。この場合、PHP でコーディングしている場合は、Github から私のPHP ユーティリティ関数を使用する必要があります。そこからの Solr 関数の 1 つを次に示します。

/**
* 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 に答える
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 に答える