总结日常使用的PHP代码片段
1.判断是否为手机号
输出:
说明:
“^1”表示以1开头
“\d”表示匹配一个数字字符。等价于 [0-9]。
“{10}”表示匹配10次
“$” 匹配输入字符串的结束位置
第二个数字通常是3456789这几个数字,那就可以更精确的去匹配:/^1[3456789]\d{9}$/
1.1.判断是否是电话或手机号
输出:
bool(true)
bool(true)
bool(false)
说明:
支持区号和+国际电话,字符长度16根据需要修改。
2.提取手机号
输出:
array(1) {
[0]=>
array(4) {
[0]=>
string(11) "18912345678"
[1]=>
string(11) "14659863526"
[2]=>
string(11) "17856985624"
[3]=>
string(11) "17625632659"
}
}
3.提取HTTP代理
输出:
array(3) {
[0]=>
array(3) {
[0]=>
string(18) "183.131.76.27 8888"
[1]=>
string(18) "183.47.175.14 8888"
[2]=>
string(16) "220.170.182.5 80"
}
[1]=>
array(3) {
[0]=>
string(13) "183.131.76.27"
[1]=>
string(13) "183.47.175.14"
[2]=>
string(13) "220.170.182.5"
}
[2]=>
array(3) {
[0]=>
string(4) "8888"
[1]=>
string(4) "8888"
[2]=>
string(2) "80"
}
}
4.判断手机归属地 (淘宝接口)
输出:
Array
(
[mts] => 1762563
[province] => 江苏
[catName] => 中国联通
[telString] => 17625632659
[areaVid] => 30511
[ispVid] => 137815084
[carrier] => 江苏联通
)
5.判断邮箱地址是否正确
常见的可以用这种方式:
输出:
但这种方式并不严格,比如“xman%@malu.me”加上%特殊字符也能通过,所以我们以正则来精确匹配:
输出:
6.判断是否是URL
输出:
以上用系统过滤器来检查,更多过滤参数参考官方文档:http://php.net/manual/en/filter.constants.php
7.二维数组去重
一维数组可以用系统函数array_unique(),二维数组如下:
输出:
Array
(
[0] => Array
(
[id] => 1
[name] => aaa
)
[1] => Array
(
[id] => 2
[name] => bbb
)
[2] => Array
(
[id] => 3
[name] => ccc
)
[3] => Array
(
[id] => 4
[name] => ddd
)
)
8.获取客户端IP
输出:
其中$type为1时输出IP整形
9.获取HTTPS状态
输出:
返回true为HTTPS,false为HTTP
10.判断php版本是否高于某个版本
首先可以通过以下2种方法获取版本号:
phpversion();
PHP_VERSION;
使用version_compare函数判断:
11.生成机器识别难度较大的验证码
使用:
12.缩减html代码
function sanitize_output($buffer) {
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s', // shorten multiple whitespace sequences
'/<!--(.|\s)*?-->/' // Remove HTML comments
);
$replace = array(
'>',
'<',
'\\1',
''
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
使用:
$html_body = '
<html>
<head>
<title>一个 HTML 页面</title>
</head>
<body>
<p>body 元素的内容会显示在浏览器中。</p>
<p>title 元素的内容会显示在浏览器的标题栏中。</p>
</body>
</html>
';
echo sanitize_output($html_body);
输出:
<html><head><title>一个 HTML 页面</title></head><body><p>body 元素的内容会显示在浏览器中。</p><p>title 元素的内容会显示在浏览器的标题栏中。</p></body></html>
12.1缩减css和js
这是一款合并压缩css和js不错的库:https://github.com/mrclay/minify
13.正则提取日志
function get_log($str){
$pattern = '/^\[(?P<time>[^\]]+)\] (?P<type>[^ ]+): (?P<info>[^ ]+) \["(?P<add>[^"]+)"\] (?P<json>[^ ]+)/i';
preg_match($pattern, $str,$match);
$res = array();
$res['time'] = strtotime($match['time']);
$res['type'] = $match['type'];
$res['info'] = $match['info'];
$res['add'] = $match['add'];
$res['json'] = json_decode($match['json']);
return $res;
}
$logLine = '[2019-04-25 17:04:22] security.INFO: 成功登录 ["江苏省苏州市"] {"url":"/login","ip":"1.9.12.75","http_method":"GET","server":"malu.me","referrer":null}';
var_dump(get_log($logLine));
输出:
array(5) {
["time"]=>
string(19) "2019-04-25 17:04:22"
["type"]=>
string(13) "security.INFO"
["info"]=>
string(12) "成功登录"
["add"]=>
string(18) "江苏省苏州市"
["json"]=>
object(stdClass)#5 (5) {
["url"]=>
string(6) "/login"
["ip"]=>
string(9) "1.9.12.75"
["http_method"]=>
string(3) "GET"
["server"]=>
string(7) "malu.me"
["referrer"]=>
NULL
}
}