次の文字を許可してはならず、他の特殊文字、アルファベット、数字などを受け入れることができるテキストフィールドの正規表現を教えてください。
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ @ &
次の文字を許可してはならず、他の特殊文字、アルファベット、数字などを受け入れることができるテキストフィールドの正規表現を教えてください。
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ @ &
これにより、上記の文字列のどの部分にも文字を含む文字列は許可されません。
^(?!.*[+\-&|!(){}[\]^"~*?:@&]+).*$
簡単な説明
^
(?!.*[+\-&|!(){}[\]^"~*?:@&]+)
.*
*
[+\-&|!(){}[\]^"~*?:@&]+
+
+
\-
&|!(){}[” «&|!(){}[
\]
^"~*?:@&” «^"~*?:@&
.*
*
$
これらは、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;
}
通常、許可しない文字をブラックリストに登録するよりも、許可する文字をホワイトリストに登録することをお勧めします。セキュリティの観点からも、実装の容易さの観点からも。
ブラックリスト ルートをたどる場合の例を次に示しますが、構文は単純ではないことに注意してください。
http://groups.google.com/group/regex/browse_thread/thread/0795c1b958561a07
すべてのアクセント文字をホワイトリストに登録したい場合、おそらく Unicode 範囲を使用すると役立つでしょうか? このリンクをチェックしてください。