[英]How can I display a list of characters that fail to match a regular expression?
例如,如果我正在進行某種形式的輸入驗證,並且正在對name
字段使用以下代碼。
preg_match("/^[a-zA-Z .-]$/", $firstname);
如果有人輸入Mr. (Awkward) Double-Barrelled
我希望能夠顯示一條消息,指出Invalid character(s): (, )
您可以獲取不在字符類中的所有字符。
對類[...]-> [^ ...]求反,然后獲取所有匹配項。
$firstname = 'Mr. (Awkward) Double-Barrelled';
if ( 0 < preg_match_all("/[^a-zA-Z .-]+/", $firstname, $cap) ) {
foreach( $cap[0] as $e ) {
echo 'invalid character(s): ', htmlspecialchars($e), "\n";
}
}
在使用中描述的PREG_OFFSET_CAPTURE標志http://docs.php.net/preg_match_all你甚至可以告訴其中該字符是在用戶輸入。
編輯:或者,您可以使用preg_replace_callback()以某種方式在視覺上標記無效字符。 例如(使用匿名函數/關閉,PHP 5.3+)
$firstname = 'Mr. (Awkward) Double-Barrelled';
$invalid = array();
$result = preg_replace_callback("/[^a-zA-Z .-]+/", function($c) use(&$invalid) { $invalid[] = $c[0]; return '['.$c[0].']'; }, $firstname);
if ( $firstname!==$result ) {
echo 'invalid characters: "', join(', ', $invalid), '" in your input: ', $result;
}
invalid characters: "(, )" in your input: Mr. [(]Awkward[)] Double-Barrelled
打印invalid characters: "(, )" in your input: Mr. [(]Awkward[)] Double-Barrelled
您可以在輸入中搜索([^a-zA-Z .-])
以獲取所有非法字符。
preg_match("/[^a-zA-Z0-9\\s\\.\\-]/", $text)
應該可以解決問題。 您真的應該轉義','。'和'-'字符。 我個人不會浪費時間來找出哪些字符無效。 如果這個人不能根據“允許的字符:(任何)”的說法弄清楚,那么他們就沒有希望了。
這是一個正則表達式字符列表,其中還包括您應該轉義的字符列表。
您也可以簡單地用“ nothing”代替有效字符-其余的(如果有的話)將無效。
$badchars = preg_replace(/[a-z0-9 .-]/, "", $input);
if(strlen($badchars))
error
您可以沿允許的字符分割:
$result = preg_split('/[a-zA-Z .-]+/s', $subject);
...並獲得所有剩余字符的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.