validate_class.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. /**
  3. * @copyright Copyright(c) 2010 aircheng.com
  4. * @file
  5. * @brief 系统统验证类文件
  6. * @author webning
  7. * @date 2010-12-02
  8. * @version 0.6
  9. * @note
  10. */
  11. /**
  12. * @brief 系统统验证类文件
  13. * @class IValidate
  14. */
  15. class IValidate
  16. {
  17. /**
  18. * @brief Email格式验证
  19. * @param string $str 需要验证的字符串
  20. * @return bool 验证通过返回 true 不通过返回 false
  21. */
  22. public static function email($str='')
  23. {
  24. return (bool)preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)+$/i',$str);
  25. }
  26. /**
  27. * @brief QQ号码验证
  28. * @param string $str 需要验证的字符串
  29. * @return bool 验证通过返回 true 不通过返回 false
  30. */
  31. public static function qq($str='')
  32. {
  33. return (bool)preg_match('/^[1-9][0-9]{4,}$/i',$str);
  34. }
  35. /**
  36. * @brief 身份证验证包括一二代身份证
  37. * @param string $str 需要验证的字符串
  38. * @return bool 验证通过返回 true 不通过返回 false
  39. */
  40. public static function id($str='')
  41. {
  42. return (bool)preg_match('/^\d{15}(\d{2}[0-9x])?$/i',$str);
  43. }
  44. /**
  45. * @brief 此IP验证只是对IPV4进行验证。
  46. * @param string $str 需要验证的字符串
  47. * @return bool 验证通过返回 true 不通过返回 false
  48. * @note IPV6暂时不支持。
  49. */
  50. public static function ip($str='')
  51. {
  52. return (bool)preg_match('/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/i',$str);
  53. }
  54. /**
  55. * @brief 邮政编码验证
  56. * @param string $str 需要验证的字符串
  57. * @return bool 验证通过返回 true 不通过返回 false
  58. * @note 此邮编验证只适合中国
  59. */
  60. public static function zip($str='')
  61. {
  62. return (bool)preg_match('/^\d{6}$/i',$str);
  63. }
  64. /**
  65. * @brief 验证字符串的长度,和数值的大小。$str 为字符串时,判定长度是否在给定的$min到$max之间的长度,为数值时,判定数值是否在给定的区间内。
  66. * @param mixed $str 要验证的内容
  67. * @param int $min 最小值或最小长度
  68. * @param int $max 最大值或最大长度
  69. * @return bool 验证通过返回 true 不通过返回 false
  70. */
  71. public static function len($str, $min, $max)
  72. {
  73. if(is_int($str)) return $str >= $min && $str <= $max;
  74. if(is_string($str))return IString::getStrLen($str) >= $min && IString::getStrLen($str) <= $max;
  75. return false;
  76. }
  77. /**
  78. * @brief 电话号码验证
  79. * @param string $str 需要验证的字符串
  80. * @return bool 验证通过返回 true 不通过返回 false
  81. */
  82. public static function phone($str='')
  83. {
  84. return (bool)preg_match('/^((\d{3,4})|\d{3,4}-)?\d{3,8}(-\d+)*$/i',$str);
  85. }
  86. /**
  87. * @brief 手机号码验证
  88. * @param string $str
  89. * @return bool 验证通过返回 true 不通过返回 false
  90. */
  91. public static function mobi($str='')
  92. {
  93. return (bool)preg_match("!^1[3|4|5|7|8][0-9]\d{4,8}$!",$str);
  94. }
  95. /**
  96. * @brief Url地址验证
  97. * @param string $str 要检测的Url地址字符串
  98. * @return bool 验证通过返回 true 不通过返回 false
  99. */
  100. public static function url($str='')
  101. {
  102. return (bool)preg_match('/^[a-zA-z]+:\/\/(\w+(-\w+)*)(\.(\w+(-\w+)*))+(\/?\S*)?$/i',$str);
  103. }
  104. /**
  105. * @brief 正则验证接口
  106. * @param mixed $reg 正则表达式
  107. * @param string $str 需要验证的字符串
  108. * @return bool 验证通过返回 true 不通过返回 false
  109. */
  110. public static function check($reg, $str='')
  111. {
  112. return (bool)preg_match('/^'.$reg.'$/i',$str);
  113. }
  114. /**
  115. * @brief 判断字符串是否为空
  116. * @param string $str 需要验证的字符串
  117. * @return bool 验证通过返回 true 不通过返回 false
  118. */
  119. public static function required($str)
  120. {
  121. return (bool)preg_match('/\S+/i',$str);
  122. }
  123. /**
  124. * @brief 百分比数字
  125. * @param string $str 需要验证的字符串
  126. * @return bool 验证通过返回 true 不通过返回 false
  127. */
  128. public static function percent($str)
  129. {
  130. return (bool)preg_match('/^[1-9][0-9]*$/',$str);
  131. }
  132. /**
  133. * @brief 用户名
  134. * @param string $str 需要验证的字符串
  135. * @return bool 验证通过返回 true 不通过返回 false
  136. */
  137. public static function name($str,$minlen=2, $maxlen=20)
  138. {
  139. return (bool)preg_match("!^[\w\x{4e00}-\x{9fa5}]{".$minlen.",".$maxlen."}$!u",$str);
  140. }
  141. /**
  142. * @brief 文件名或者文件路径
  143. * @param string $str 需要验证的字符串
  144. * @return bool 验证通过返回 true 不通过返回 false
  145. */
  146. public static function filename($str)
  147. {
  148. //禁止跨越目录
  149. if(strpos($str,"..") !== false)
  150. {
  151. return false;
  152. }
  153. return (bool)preg_match("%^[\w\./:/!]+$%",$str);
  154. }
  155. /**
  156. * @brief 常用检索过滤
  157. * @param string $str 需要验证的字符串
  158. * @return bool 验证通过返回 true 不通过返回 false
  159. */
  160. public static function strict($str)
  161. {
  162. return (bool)preg_match("|^[\w\.\,\-<>=\!\x{4e00}-\x{9fa5}\s*]+$|u",$str);
  163. }
  164. /**
  165. * add by Scott Chen on 2017-11-03
  166. * @brief 身份证18位格式验证
  167. * @param string $str 需要验证的字符串
  168. * @return bool 验证通过返回 true 不通过返回 false
  169. */
  170. public static function id_ex_18($str='')
  171. {
  172. return (bool)preg_match('/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/i',$str);
  173. }
  174. /**
  175. * add by Scott Chen on 2017-11-03
  176. * @brief 身份证15位格式验证
  177. * @param string $str 需要验证的字符串
  178. * @return bool 验证通过返回 true 不通过返回 false
  179. */
  180. public static function id_ex_15($str='')
  181. {
  182. return (bool)preg_match('/^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$/i',$str);
  183. }
  184. }