<?php namespace SilverStripe\Forms; /** * Text input field with validation for correct email format according to RFC 2822. */ class EmailField extends TextField { /** * {@inheritdoc} */ public function Type() { return 'email text'; } /** * {@inheritdoc} */ public function getAttributes() { return array_merge( parent::getAttributes(), array( 'type' => 'email', ) ); } /** * Validates for RFC 2822 compliant email addresses. * * @see http://www.regular-expressions.info/email.html * @see http://www.ietf.org/rfc/rfc2822.txt * * @param Validator $validator * * @return string */ public function validate($validator) { $this->value = trim($this->value); $pattern = '^[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$'; // Escape delimiter characters. $safePattern = str_replace('/', '\\/', $pattern); if($this->value && !preg_match('/' . $safePattern . '/i', $this->value)) { $validator->validationError( $this->name, _t('EmailField.VALIDATION', 'Please enter an email address'), 'validation' ); return false; } return true; } }