PrestaShop 1.7.8
Create file:
/override/classes/Validate.php
add in this file the code:
<?php
use Egulias\EmailValidator\EmailValidator;
use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
use Egulias\EmailValidator\Validation\RFCValidation;
use PrestaShop\PrestaShop\Core\ConstraintValidator\Constraints\CustomerName;
use PrestaShop\PrestaShop\Core\ConstraintValidator\Factory\CustomerNameValidatorFactory;
use PrestaShop\PrestaShop\Core\Domain\Currency\ValueObject\NumericIsoCode;
use PrestaShop\PrestaShop\Core\Email\SwiftMailerValidation;
use PrestaShop\PrestaShop\Core\String\CharacterCleaner;
use Symfony\Component\Validator\Validation;
class Validate extends ValidateCore
{
public static function isCustomerName($name)
{
$validatorBuilder = Validation::createValidatorBuilder();
$validatorBuilder->setConstraintValidatorFactory(
new CustomerNameValidatorFactory(new CharacterCleaner())
);
$validator = $validatorBuilder->getValidator();
$violations = $validator->validate($name, [
new CustomerName(),
]);
// Custom validation: check if name contains more than 4 capital letters
$capitalLettersCount = preg_match_all('/[A-Z]/', $name);
$normalLettersCount = preg_match_all('/[a-z]/', $name);
if ($capitalLettersCount > 1 && $normalLettersCount > 1) {
if ($capitalLettersCount > 4) {
return 0; // More than 4 capital letters, validation fails
}
}
return (count($violations) !== 0) ? 0 : 1;
}
}
If the name contains mixed letters (uppercase and lowercase letters) and more than 4 uppercase letters, registration is not possible.
This should block fake accounts for example gHnfJCZoaIQ, ANKFDgUmTHJ etc., but allow the creation of regular accounts.