validation.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. function validateData(&$data,$parameters){
  3. $validateTextValue = function($value, $pattern = null){
  4. if(!is_null($pattern)){
  5. $filteredValue = filter_var($value
  6. , FILTER_VALIDATE_REGEXP
  7. , array('options' => array(
  8. 'regexp' => '/^' . $pattern . '$/'
  9. ))
  10. );
  11. } else {
  12. $filteredValue = filter_var($value);
  13. }
  14. if($filteredValue === false)
  15. return null;
  16. return $filteredValue;
  17. };
  18. $validateNumberValue = function($value){
  19. $filteredValue = filter_var($value, FILTER_VALIDATE_INT);
  20. if($filteredValue === false && !empty($value))
  21. return null;
  22. return $filteredValue;
  23. };
  24. $validateCheckboxValue = function($value){
  25. $filteredValue = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
  26. if(is_null($filteredValue))
  27. return null;
  28. return $filteredValue;
  29. };
  30. $validateListValue = function($value, $expectedValues){
  31. $filteredValue = filter_var($value);
  32. if($filteredValue === false)
  33. return null;
  34. if(!in_array($filteredValue, $expectedValues)){ // Check sub-values?
  35. foreach($expectedValues as $subName => $subValue){
  36. if(is_array($subValue) && in_array($filteredValue, $subValue))
  37. return $filteredValue;
  38. }
  39. return null;
  40. }
  41. return $filteredValue;
  42. };
  43. if(!is_array($data))
  44. return false;
  45. foreach($data as $name => $value){
  46. $registered = false;
  47. foreach($parameters as $context => $set){
  48. if(array_key_exists($name, $set)){
  49. $registered = true;
  50. if(!isset($set[$name]['type'])){
  51. $set[$name]['type'] = 'text';
  52. }
  53. switch($set[$name]['type']){
  54. case 'number':
  55. $data[$name] = $validateNumberValue($value);
  56. break;
  57. case 'checkbox':
  58. $data[$name] = $validateCheckboxValue($value);
  59. break;
  60. case 'list':
  61. $data[$name] = $validateListValue($value, $set[$name]['values']);
  62. break;
  63. default:
  64. case 'text':
  65. if(isset($set[$name]['pattern'])){
  66. $data[$name] = $validateTextValue($value, $set[$name]['pattern']);
  67. } else {
  68. $data[$name] = $validateTextValue($value);
  69. }
  70. break;
  71. }
  72. if(is_null($data[$name])){
  73. echo 'Parameter \'' . $name . '\' is invalid!' . PHP_EOL;
  74. return false;
  75. }
  76. }
  77. }
  78. if(!$registered)
  79. return false;
  80. }
  81. return true;
  82. }