任何一個可以告訴我的正則表達式文本框不應該允許下列字符並可以接受其它特殊字符,字母,數字等:正則表達式,應該允許有限的特殊字符
+ - && || ! () { } [ ]^" ~ * ? : \ @ &
任何一個可以告訴我的正則表達式文本框不應該允許下列字符並可以接受其它特殊字符,字母,數字等:正則表達式,應該允許有限的特殊字符
+ - && || ! () { } [ ]^" ~ * ? : \ @ &
這將不允許包含在上述字符串的任何部分字符的字符串。在一行(在字符串的開頭或之後的換行字符)^
^(?!.*[+\-&|!(){}[\]^"~*?:@&]+).*$
簡要說明
(?!.*[+\-&|!(){}[\]^"~*?:@&]+)
.*
*
[+\-&|!(){}[\]^"~*?:@&]+
+
+
\-
&|!(){}[」 «&|!(){}[
\]
^"~*?:@&」 «^"~*?:@&
的.*
*
$
它通常更好地將您允許的字符列入白名單,而不是將您不允許的字符列入黑名單。無論是從安全的角度,還是從實現的角度來看。
如果你真的走黑名單路線,這裏是一個例子,但要警告,語法並不簡單。
http://groups.google.com/group/regex/browse_thread/thread/0795c1b958561a07
如果要列入白名單的所有重音字符,或許使用Unicode範圍將幫助?看看這個鏈接。
我認識到那些需要爲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;
}
你是指在一個文本框?你能擴展更多嗎? –
@ 491243你改變了你的暱稱? :) – alfasin
提供一些示例輸入,預期的輸出和正則表達式的味道。 – anubhava