0

重複の可能性:
正規表現はエラー エコーを生成しません。誰か助けてください。

正規表現が正しくない場合にフォームデータがデータベースに挿入されないようにする方法を知っている人はいますか? おそらくphpでボタンを無効にする方法はありますか(すでにjavascriptでそれを行っています)。

 function ValidateForm($string, $type){

    switch($type)
        {
        case 'name':
            $pattern="/^[A-Za-z. -]+$/";
            break;
        case 'sex':
            $pattern="/[MWmw]/";
            break;
        case 'insertion':
            $pattern="/^[A-Za-z]*$/";
            break;
        case 'initials':
            $pattern="/^([A-Z]\.)+$/";
        break;
        case 'adress':
            $pattern="/^([A-Za-z -])+[0-9]+([a-z -])*$/";
            break;
        case 'postcode':
            $pattern="/^[1-9][0-9]{3}[]?[A-Za-z]{2}$/";
            break;
        case 'phone':
            $pattern="/^[0-9]{10}$/";
            break;
        case 'email':
            $pattern="/(^[0-9a-zA-Z_\.-]{1,}@([0-9a-zA-Z_\-]{1,}\.)+[0-9a-zA-Z_\-]{2,}$)/";
            break;
        case 'postbus':
            $pattern="/^[A-Z][a-zA-Z -]+$/";
            break;
        }



        if (preg_match($pattern, $string)){
                return true;
            } else {
                return false;
            }   
        }   



        if (ValidateForm($_POST["surname"],'name')){
            $error1 = false; 
        }else{
            $error1 = true; 
        } 

        if (ValidateForm($_POST["sex"],'sex')){
            $error2 = false; 
        }else{
            $error2 = true; 
        }





                if (ValidateForm($_POST["insertion"],'insertion')){
            $error3 = false;
        }else{
            $error3 = true; 
        }

        if (ValidateForm($_POST["initials"],'initials')){
            $error4 = false;
        }else{
            $error4 = true; 
        }

        if (ValidateForm($_POST["name"],'name')){
            $error5 = false;
        }else{
            $error5 = true; 
        }


        if (ValidateForm($_POST["adress"],'adress')){
            $error6 = false;
        }else{
            $error6 = true; 
        }

        if (ValidateForm($_POST["postcode"],'postcode')){
            $error7 = false;
        }else{
            $error7 = true; 
        }           

        if (ValidateForm($_POST["postbus"],'postbus')){
            $error8 = false;
        }else{
            $error8 = true; 
        }

        if (ValidateForm($_POST["private_phone"],'phone')){
            $error9 = false;
        }else{
            $error9 = true; 
        }

        if (ValidateForm($_POST["mobile_phone"],'phone')){
            $error10 = false;
        }else{
            $error10 = true; 
        }

        if (ValidateForm($_POST["work_phone"],'phone')){

            $error11 = false;

        }else{
            $error11 = true;
        }

        if (ValidateForm($_POST["work_email"],'email')){
            $error12 = false;
        }else{
            $error12 = true;
        }

        if (ValidateForm($_POST["private_email"],'email')){
            $error13 = false;
        }else{
            $error13 = true;
    }
4

1 に答える 1

0

シンプルで、代わりにストアドプロシージャを使用してください。それらを呼び出すだけで、mysqlコアに作業を任せることができます。正規表現が一致した場合と一致しなかった場合、プロシージャはブール値を返します。

mysql正規表現REGEXPの使用:http://dev.mysql.com/doc/refman/5.1/en/regexp.html

CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_REGEXP`(IN `Str` CHAR(32), OUT `result` INT)
        LANGUAGE SQL
        NOT DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
BEGIN
   DECLARE  result INT DEFAULT 0;
   SELECT str REGEXP '^[a-d]' INTO result;
END
于 2012-09-01T14:14:49.583 に答える