簡體   English   中英

無法將數據與PHP中的正則表達式匹配

[英]Unable to match data with regular Expressions in PHP

我編寫了一段代碼,該代碼接受用戶的輸入並將其插入數據庫。 HTML代碼如下:

<td align="center"><textarea class="txt" required=required rows="3" name="Xschool" cols="30"></textarea></td>

而且我需要檢查數據是否有任何特殊符號。 我為此使用了正則表達式,如下所示:

    $Xschool=$_POST['Xschool'];
    $pattern = '/[A-Z ]+$/';
$Xschool=strtoupper($Xschool);

if(!preg_match($pattern,$Xschool))
{
    echo "<pre>We are sorry. The X School ".$Xschool." is  invalid. Make sure your name contains no special symbols/numbers.</pre>";
    exit;
}

此代碼對許多類型的輸入均正確工作,但對輸入ST MARY'S不起作用。 遇到'符號時,代碼無法正常運行。 我該怎么做才能克服這個問題? 請幫我!! 提前致謝。

更改模式,使其滿足您的需求。 為此,您首先需要非常清楚地了解您的需求。 '/[AZ ]+$/'不符合您的需求; '/[AZ\\' ]+$/'可以滿足您的需求? 口音呢? 拉丁字母以外的字符呢? 自己回答這些問題,然后根據您的答案設計正則表達式或其他驗證算法。

您的基本理解有誤。

/ [AZ] + $ /

將匹配包含以AZ或空格結尾的行的任何字符串。

我建議您要:

if(preg_match('/[^A-Z ]/', $Xschool))
{
 ...
}

它將匹配任何包含非AZ或空格的字符的字符串。

只需在匹配項中添加':

    $Xschool=$_POST['Xschool'];
    $pattern = "/[A-Z ']+$/";
$Xschool=strtoupper($Xschool);

if(!preg_match($pattern,$Xschool))
{
    echo "<pre>We are sorry. The X School ".$Xschool." is  invalid. Make sure your name contains no special symbols/numbers.</pre>";
    exit;
}

試試這個正則表達式。

[a-zA-Z0-9\'\s]{0,50}

這將允許使用小寫和大寫字母以及0到9位數字,最多50個名字。

如果您只想使用大寫字母,那么。

[A-Z\'\s]{0,50}

嘗試這個

 $Xschool=$_POST['Xschool'];
$pattern = '/^[a-zA-Z][a-zA-Z ]*$/';
$Xschool=strtoupper($Xschool);

if(!preg_match($pattern,$Xschool))
{
    echo "<pre>We are sorry. The X School ".$Xschool." is  invalid. Make sure your name contains no special symbols/numbers.</pre>";
    exit;
}

您的模式/[AZ ]+$/不包含起始錨點 這意味着,當您嘗試將其與ST MARY'S匹配時,它將與結尾S匹配,並且您的代碼看不到任何錯誤。 將模式更改為/^[AZ ]+$/將解決該問題。

但是,根據您的評論,您會遇到更大的問題-您在不清理用戶輸入的情況下盲目將用戶輸入傳遞給SQL查詢,這意味着您容易受到 SQL注入攻擊的攻擊 學習防御這些攻擊的正確方法,而不要提出像該正則表達式這樣的被誤導的創可貼。

另一種方法:

替換所有VALID字符,在您的方案中,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U ,V,W,X,Y,Z,SPACE和任何其他無效字符,不帶“”。 然后,如果剩余字符串的長度> 0,則意味着必須存在其他一些INVALID字符。

<?php

    function isStringOnlyAZSPACE($the_string)
    {
        $valid_chars = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ');

        $the_string  = str_replace($valid_chars, "", $the_string);

        return (strlen($the_string)==0);
    }

    echo isStringOnlyAZSPACE("ST MARY'S")?"true":"false"; // FALSE

    echo isStringOnlyAZSPACE("ST MARYS")?"true":"false"; // TRUE

?>

在此處查看其運行情況http://3v4l.org/GvVi6

我還必須在您的問題中重復@DCoder的評論“這絕對是避免SQL錯誤的錯誤方法。”

暫無
暫無

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

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