PHP preg_match模式是主题的子字符串

时间:2019-05-14 15:33:54

标签: php substring preg-match

我要测试输入的类型是否为1234567(7位数字)。 我用

preg_match($pattern,$subject);

其中

$pattern = '/^[0-9]{7}$/';

但是,如果主题是

,我得到1分
L-8987765

我不想。我该如何克服?

   function isDocid($documento_id)
      {
       $subject = pg_escape_literal($documento_id);
       $pattern1 = '/^[0-9]{7}$/';

            if (preg_match($pattern1, $subject) === 1) 
            {
            return 1;
            }
            else
            {
            return 0;
            }}

$test_carta = isDocid('L-8987765');
echo('<p> ja existe docid   '. $test_carta  .'</p>');

我期望:         ja存在docid 0

1 个答案:

答案 0 :(得分:0)

来自the documentation(斜体字是我的):

  

pg_escape_literal() 转义用于查询PostgreSQL数据库的文字。它以PostgreSQL格式返回转义文字。 pg_escape_literal() 在数据前后添加引号

换句话说,由于引号的原因,您永远都不会从正则表达式检查中得到肯定的结果。在准备将数据插入数据库查询之前,请不要使用数据库转义符。或者,更好的是,不要在数据库查询中插入PHP变量,而应使用prepared statements

function isDocid($documento_id)
{
   return (preg_match('/^[0-9]{7}$/', $documento_id) === 1) ? 1 : 0;
}

$test_carta = isDocid('L-8987765');
echo('<p> ja existe docid   '. $test_carta  .'</p>');