Symfony在表单字段中验证电话

时间:2015-07-23 13:07:02

标签: php mysql symfony doctrine-orm

我有表格现场电话的Symfony 2.6和个人信息表格,如rhis

+38 (918) 280-1594

如果开发人员写“_”或更多数字,则为空格。我如何检查这个? 像开发人员写的那样

+38 (918) 2 801_594

我在DB中设置

+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这正是我需要在我的数据库中,我需要在数据库中设置正确的电话并限制13个字符 - 一个“+ “和12 - 数字

4 个答案:

答案 0 :(得分:6)

安装MisdPhoneNumberBundle后,您可以使用该套件的验证器:

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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

如果你想像评论所说的那样将<br/>替换为\n,你需要设置这种模式:

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

注意开始和结束时的/以限制模式,最后i表示任何大小写匹配。

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

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

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

答案 3 :(得分:0)

您应该使用Symfony Data Transformers完成此任务。