Primeiro de tudo, tente não complicar demais isso. Na minha opinião, o código não é complexo o suficiente para justificar o uso de padrões de design orientados a objetos.
Eu o vejo, seu código se resume basicamente a validar uma entrada com diferentes expressões regulares (que dependem de algumas bandeiras especificadas pelo usuário como allow_num
e allow_space
.
Portanto, minha sugestão é o seguinte (a refatoração básica está construindo parte da expressão regular com base na configuração antes usando Esta expressão em qualquer lógica de validação):
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;
}