首页 > 解决方案 > PHP 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

标签: phpsubstringpreg-match

解决方案


文档(斜体是我的):

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

换句话说,由于引号中的方式,您永远不会从正则表达式检查中获得积极的结果。在准备好将数据插入数据库查询之前,不要使用数据库转义。或者,更好的是,不要在数据库查询中插入 PHP 变量——而是使用准备好的语句

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>');

推荐阅读