php - 如何显示与正则表达式不匹配的字符列表?

标签 php regex

例如,如果我正在进行一些表单输入验证,并且我在 name 字段中使用以下代码。

    preg_match("/^[a-zA-Z .-]$/", $firstname);

如果有人输入Mr. (尴尬)Double-Barrelled 我希望能够显示一条消息,指出无效字符:(, )

最佳答案

您可以获取所有出现的不属于您的字符类的字符。
否定类 [...] -> [^...],然后获取所有匹配项。

$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";
  }
}

使用 http://docs.php.net/preg_match_all 中描述的 PREG_OFFSET_CAPTURE 标志您甚至可以告诉用户该字符在输入中的位置。

编辑:或者您可以使用 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;
}

打印输入中的无效字符:“(, )”:Mr. [(]Awkward[)] Double-Barrelled

关于php - 如何显示与正则表达式不匹配的字符列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2475595/

相关文章:

python - Scrapy:使用正则表达式跟踪链接

javascript - 只允许特定字符集(Javascript)的正则表达式?

Javascript 替代品

java - 修复 java 中交错的正则表达式替换输出

PHP pThreads - 如何执行垃圾收集?

php - 哪个 Hook 可以更改 WooCommerce 购物车页面中的数量更新?

php - `if($_POST)` 是检查脚本是否已发布的可靠方法吗?

javascript - Ajax PHP 中的空白结果

php - Heroku 的 Windows 工具带和 LD_LIBRARY_PATH

python - 如何使用正向后行断言从单词 "named"之后的字符串中提取子字符串