3 namespace Drupal\user\Plugin\Validation\Constraint;
5 use Drupal\Component\Utility\Unicode;
6 use Symfony\Component\Validator\Constraint;
7 use Symfony\Component\Validator\ConstraintValidator;
10 * Validates the UserName constraint.
12 class UserNameConstraintValidator extends ConstraintValidator {
17 public function validate($items, Constraint $constraint) {
18 if (!isset($items) || !$items->value) {
19 $this->context->addViolation($constraint->emptyMessage);
22 $name = $items->first()->value;
23 if (substr($name, 0, 1) == ' ') {
24 $this->context->addViolation($constraint->spaceBeginMessage);
26 if (substr($name, -1) == ' ') {
27 $this->context->addViolation($constraint->spaceEndMessage);
29 if (strpos($name, ' ') !== FALSE) {
30 $this->context->addViolation($constraint->multipleSpacesMessage);
32 if (preg_match('/[^\x{80}-\x{F7} a-z0-9@+_.\'-]/i', $name)
34 // Non-printable ISO-8859-1 + NBSP
38 // Various space characters
40 // Bidirectional text overrides
42 // Various text hinting characters
48 // Replacement characters
50 // NULL byte and control characters
54 $this->context->addViolation($constraint->illegalMessage);
56 if (Unicode::strlen($name) > USERNAME_MAX_LENGTH) {
57 $this->context->addViolation($constraint->tooLongMessage, ['%name' => $name, '%max' => USERNAME_MAX_LENGTH]);