【问题标题】:Symfony validate telephone in form fieldSymfony 在表单字段中验证电话
【发布时间】:2015-07-23 13:07:02
【问题描述】:

我有 Symfony 2.6 和表单域电话中的个人信息表单,例如 rhis

+38 (918) 280-1594

如果开发者写“_”或更多数字,空格。我如何检查这个? 喜欢开发者写

+38 (918) 2 801_594

我在数据库中设置

+38(918)2801594

解决此问题的流程和决策或捆绑包是什么?

->add('telephone', null, array('label' => 'Telephone', 'max_length' => 255, 'required' => false));

$builder->get('telephone')->addModelTransformer(new CallbackTransformer(
    // transform <br/> to \n so the textarea reads easier
    function ($originalDescription) {
        return preg_replace('/[^0-9()]+/', "", $originalDescription);
    },
    function ($submittedDescription) {
        // remove most HTML tags (but not br,p)
        $cleaned = strip_tags($submittedDescription, '<br><br/><p>');
        // transform any \n to real <br/>
        return str_replace("\n", '<br/>', $cleaned);
    }
));

但它是如何工作的?我写电话 65454### 而这个“#”写在我的数据库中,这是错误的。为什么我不明白?我需要确定位数(12位)。也许请举例。

我发布了 +30632666$$# 并在 DB 中设置了这个 +30632666$$# 但在表格中可见这个 30632666 这正是我在我的 DB 中需要的,我需要在数据库中设置正确的电话并限制 13 个字符 - 一个“+ " 和 12 - 数字

【问题讨论】:

    标签: php mysql symfony doctrine-orm


    【解决方案1】:

    安装MisdPhoneNumberBundle后,可以使用bundle的验证器:

    use Doctrine\ORM\Mapping as ORM;
    use Misd\PhoneNumberBundle\Validator\Constraints as MisdAssert;
    
    /**
     * @ORM\Entity
     * @ORM\Table
     */
    class Entity
    {
    
      // ...
    
      /**
       * @ORM\Column(type="string", length=50)
       * @MisdAssert\PhoneNumber()
       */
      private $phone;
    }
    

    【讨论】:

      【解决方案2】:

      您应该使用MisdPhoneNumberBundle,它为您提供有关电话号码和 Symfony 的所有信息。

      【讨论】:

      • 如果我使用这个捆绑包,我该如何解决我的问题?我需要在我的实体字段中添加断言或在表单中使用?请举例
      • 我添加了归档实体` /** * @ORM\Column(type="phone_number") */ protected $telephone;` 和表单-&gt;add('phone_number', 'tel', array('default_region' =&gt; 'GB', 'format' =&gt; PhoneNumberFormat::NATIONAL)) 现在错误
      • 类型字段,我检查一下。但我想要简单的解决方案。我需要 12 个数字而不是特殊字符,只是数字
      • “类型字段”?你有更完整的错误信息吗?您是否遵循捆绑包的所有安装说明?特别是 Doctrine 映射,并更新您的数据库模式。
      【解决方案3】:

      我不明白你试图用其他东西替换# 是什么意思。如果这是 preg_replace 调用,那么它不起作用也就不足为奇了,因为您正在寻找一个看起来像这样的字符串:

      #<br, (optional spaces), (Maybe /), >#
      

      如果你想像评论说的那样用\n 替换&lt;br/&gt;,你需要把这个模式:

      /<br\s*\/?\s*>/i
      

      注意开头和结尾的/ 以限制模式,结尾的i 表示任何大小写匹配。

      如果要替换#、空格和_,我认为最好的方法是替换任何不是() 的数字的字符。在这种情况下,这个正则表达式应该可以工作(未经测试):

      preg_replace('/[^0-9()]+/', "", $originalDescription);
      

      这意味着:用空字符串替换 0-9() 中不包含 1 个或多个字符的任何序列(因为 '^')。

      【讨论】:

      • 这很好,但我发布了 +30632666$$# 并在数据库中设置了这个 +30632666$$# 但在表格中可见这个 30632666 这正是我在我的数据库中需要的,我需要在数据库中正确设置电话和限制 13 个字符 - 一个“+”和 12 个 - 数字
      • 请帮助我发布 +30632666$$# 并在 DB 中设置此 +30632666$$# 但在表单中可见此 30632666 这正是我在我的 DB 中需要的
      【解决方案4】:

      你应该使用 Symfony Data Transformers 来完成这个任务。

      【讨论】:

        猜你喜欢
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-16
        • 2011-05-11
        • 2011-06-27
        相关资源
        最近更新 更多