簡體   English   中英

如何僅在 PHP 中限制某些特殊字符?

[英]How can I restrict some special characters only in PHP?

我正在使用 preg_match 來限制表單帖子中的特殊字符。 現在我需要限制一些特殊字符,比如%,$,#,*並且我需要像一樣發布。 如何僅限制某些特殊字符。

我的代碼:

<?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>

黑名單(=枚舉無效字符)在 unicode 世界中不是一個選項。 例如,考慮這樣的“名稱”:

☝ⓚƒ

你真的不想把所有這些都列入黑名單。

相反,白名單方法非常簡單,使用u模式和 unicode 屬性:

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

由於我們談論的是驗證真實姓名,請在開始將事情復雜化之前閱讀程序員相信姓名的謊言

你應該使用:

([%\$#\*]+)

匹配這些字符。

所以在preg_match你應該使用:

if(preg_match("/([%\$#\*]+)/", $firstname))
{
   echo 'Invalid Name';
}
else
{
   echo $firstname;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM