En primer lugar, trate de no complicar en exceso esto. En mi opinión, el código no es lo suficientemente complejo como para justificar el uso de patrones de diseño orientados a objetos.
Como lo veo, su código básicamente se reduce a validar una entrada con diferentes expresiones regulares (que dependen de algunos indicadores especificados por el usuario como allow_num
y allow_space
.
Entonces, mi sugerencia es la siguiente (la refactorización básica es construir parte de la expresión regular basada en la configuración antes usando esta expresión en cualquier lógica de validación):
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;
}