Tout d'abord, essayez de ne pas compliquer trop. À mon avis, le code n'est pas assez complexe pour justifier l'utilisation de modèles de conception orientés objet.
Comme je le vois, votre code se résume essentiellement à valider une entrée avec différentes expressions régulières (qui dépendent de certains drapeaux spécifiés par l'utilisateur comme allow_num
et allow_space
.
Ma suggestion est donc la suivante (le refactorisation de base consiste à construire une partie de l'expression régulière en fonction de la configuration avant utilisant Cette expression dans n'importe quelle logique de validation):
protected function isTextValid() {
$allowedCharacters = 'A-Za-z';
if ($this->data['allow_spaces']) {
$allowedCharacters .= '\s';
}
if ($this->data['allow_num']) {
$allowedCharacters .= '\d';
}
if (!preg_match("#^[{$allowedCharacters}]+\$#", $this->value)) {
$this->messages = foo ? foor : bar;
return false;
}
return true;
}