gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:29:02 28 4
gpt4 key购买 nike

例如,如果我正在进行一些表单输入验证,并且我在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com