I'm starting to learn OOP with PHP, and all I've learned so far is just by searching and reading. So I have this need to check input data for certain things like min of chars, max of chars, spaced or not spaced, just letters or not.
So far I've just created the alpha()
method which is just for letters only. I'm pretty sure this is horrible coding and can and should be improved. I would love some feedback on how I can improve this class.
I also have a function that strips tags when '<' and '>' becomes available on the strings, but it's not currently in the code.
class dataValidator {
public function alpha($data, $space = null, $minimum = null, $maximum = null, $extends = null) {
$data = trim($data);
if ( !empty($data) ) {
$data = preg_replace("/\s{2,}/", " ", $data);
if ( isset($space) && isset($minimum) && isset($maximum) && isset($extends) ) {
if ( $minimum == 0 || $maximum < $minimum ) { return false; }
if ( $space === true ) {
if ( $extends === "EXT_PUNCTUATION" ) {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}\p{P}\ ]/u", "", $newData);
$dataLen = strlen($newData);
if ( $dataLen >= $minimum && $dataLen <= $maximum ) {
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return false; }
} else if ( $extends === "EXT_ANY" ) {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}\p{P}\p{S}\ ]/u", "", $newData);
$dataLen = strlen($newData);
if ( $dataLen >= $minimum && $dataLen <= $maximum ) {
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return false; }
} else { return false; }
} else {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}]/u", "", $newData);
$dataLen = strlen($newData);
if ( $dataLen >= $minimum && $dataLen <= $maximum ) {
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return false; }
}
} else if ( isset($space) && isset($minimum) && isset($maximum) ) {
if ( $minimum == 0 || $maximum < $minimum ) { return false; }
if ( $space === true ) {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}\ ]/u", "", $newData);
$dataLen = strlen($newData);
if ( $dataLen >= $minimum && $dataLen <= $maximum ) {
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return false; }
} else {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}]/u", "", $newData);
$dataLen = strlen($newData);
if ( $dataLen >= $minimum && $dataLen <= $maximum ) {
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return false; }
}
} else if ( isset($space) && isset($minimum) ) {
if ( $minimum == 0 ) { return false; }
if ( $space === true ) {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}\ ]/u", "", $newData);
if ( strlen($newData) >= $minimum ) {
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return false; }
} else {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}]/u", "", $newData);
if ( strlen($newData) >= $minimum ) {
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return false; }
}
} else if ( isset($space) ) {
if ( $space === true ) {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}\ ]/u", "", $newData);
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
} else { return self::alpha($data); }
} else {
$newData = html_entity_decode($data, ENT_HTML5 | ENT_QUOTES, "UTF-8");
$newData = preg_replace("/[^\p{L}]/u", "", $newData);
$newData = htmlentities($newData, ENT_HTML5 | ENT_QUOTES, "UTF-8");
return $newData;
}
} else { return false; }
}
}
So using this class the following code:
$string = "Hola mis 100 canarios, un dia hermoso en la cabaña.! And what about thís guy right here.? Are this <i> and </i> tags ?";
echo "<pre>String: $string</pre><br />";
$_validator = new dataValidator();
$newString_1 = $_validator->alpha($string);
$newString_2 = $_validator->alpha($string, true);
$newString_3 = $_validator->alpha($string, true, 500);
$newString_4 = $_validator->alpha($string, true, 20, 150);
$newString_5 = $_validator->alpha($string, true, 20, 150, "EXT_PUNCTUATION");
$newString_6 = $_validator->alpha($string, true, 20, 150, "EXT_ANY");
echo "<pre>Alpha(data) validator: $newString_1</pre>";
echo "<pre>Alpha(data, space: true) validator: $newString_2</pre>";
echo "<pre>Alpha(data, space: true, min: 500) validator: $newString_3</pre>";
echo "<pre>Alpha(data, space: true, min: 20, max: 100) validator: $newString_4</pre>";
echo '<pre>Alpha(data, space: true, min: 20, max: 100, extends: "EXT_PUNCTUATION") validator: '.$newString_5.'</pre>';
echo '<pre>Alpha(data, space: true, min: 20, max: 100, extends: "EXT_ANY") validator: '.$newString_6.'</pre>';
Will output something like:
String: Hola mis 100 canarios, un dia hermoso en la cabaña.! And what about thís guy right here.? Are this <i> and </i> tags ? Alpha(data) validator: HolamiscanariosundiahermosoenlacabañaAndwhataboutthísguyrighthereArethisianditags Alpha(data, space: true) validator: Hola mis canarios un dia hermoso en la cabaña And what about thís guy right here Are this i and i tags Alpha(data, space: true, min: 500) validator: Alpha(data, space: true, min: 20, max: 100) validator: Hola mis canarios un dia hermoso en la cabaña And what about thís guy right here Are this i and i tags Alpha(data, space: true, min: 20, max: 100, extends: "EXT_PUNCTUATION") validator: Hola mis canarios, un dia hermoso en la cabaña.! And what about thís guy right here ? Are this i and /i tags ? Alpha(data, space: true, min: 20, max: 100, extends: "EXT_ANY") validator: Hola mis canarios, un dia hermoso en la cabaña.! And what about thís guy right here ? Are this <i> and </i> tags ?
For strings in Spanish, I need to check for UTF-8 characters like 'ñ, é, í' etc.