首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅在PHP中限制某些特殊字符?

问如何仅在PHP中限制某些特殊字符?
EN

Stack Overflow用户
提问于 2014-08-13 16:29:34
回答 2查看 15.9K关注 0票数 2

我使用preg_match来限制表单post中的特殊字符。现在我需要限制一些特殊的字符,比如%,$,#,*,我需要像bé一样发帖。如何才能只限制某些特殊字符。

我的代码:

代码语言:javascript
复制
<?php
$firstname='';
if(isset($_POST['submit']))
{
    $firstname=$_POST['firstname'];
    if(preg_match("/[^a-zA-Z0-9]+/", $firstname))
    {
    echo 'Invalid Name';
    }
    else
    {
    echo $firstname;
    }

}
?>

<html>
<body>
<form method="post">
<input type="text" name="firstname"/>
<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-13 16:32:50

您应该使用:

代码语言:javascript
复制
([%\$#\*]+)

来匹配这些字符。

因此,在preg_match中,您应该使用:

代码语言:javascript
复制
if(preg_match("/([%\$#\*]+)/", $firstname))
{
   echo 'Invalid Name';
}
else
{
   echo $firstname;
}
票数 2
EN

Stack Overflow用户

发布于 2014-08-13 16:32:39

黑名单(=枚举无效字符)在unicode世界中不是一个选项。例如,考虑如下所示的“名称”:

Ж☝kƒ

你并不是真的想把所有这些都列入黑名单。

相反,使用u模式和unicode属性的白名单方法非常简单:

代码语言:javascript
复制
var_dump(preg_match('/^[\p{L}\p{N}]+$/u', 'ßäßå'));  // 1
var_dump(preg_match('/^[\p{L}\p{N}]+$/u', 'r2d2'));  // 1
var_dump(preg_match('/^[\p{L}\p{N}]+$/u', 'w#t?'));  // 0
var_dump(preg_match('/^[\p{L}\p{N}]+$/u', 'Ж☝ⓚƒ'));  // 0

由于我们讨论的是验证真实姓名,请在开始复杂化之前先阅读Falsehoods Programmers Believe About Names。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25281484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档