1: <?php
2:
3: /**
4: * Validates an IPv4 address
5: * @author Feyd @ forums.devnetwork.net (public domain)
6: */
7: class HTMLPurifier_AttrDef_URI_IPv4 extends HTMLPurifier_AttrDef
8: {
9:
10: /**
11: * IPv4 regex, protected so that IPv6 can reuse it.
12: * @type string
13: */
14: protected $ip4;
15:
16: /**
17: * @param string $aIP
18: * @param HTMLPurifier_Config $config
19: * @param HTMLPurifier_Context $context
20: * @return bool|string
21: */
22: public function validate($aIP, $config, $context)
23: {
24: if (!$this->ip4) {
25: $this->_loadRegex();
26: }
27:
28: if (preg_match('#^' . $this->ip4 . '$#s', $aIP)) {
29: return $aIP;
30: }
31: return false;
32: }
33:
34: /**
35: * Lazy load function to prevent regex from being stuffed in
36: * cache.
37: */
38: protected function _loadRegex()
39: {
40: $oct = '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])'; // 0-255
41: $this->ip4 = "(?:{$oct}\\.{$oct}\\.{$oct}\\.{$oct})";
42: }
43: }
44:
45: // vim: et sw=4 sts=4
46: