php用正则表达抓取网页中文章(之前突然感兴趣写的一个三合一三合一收款码程序(图))
优采云 发布时间: 2021-09-30 04:05php用正则表达抓取网页中文章(之前突然感兴趣写的一个三合一三合一收款码程序(图))
前言
我突然对写一个三合一的支付代码程序感兴趣,因为它只是为了好玩。我不太关心密码验证。可以使用纯数字。随着越来越多的用户觉得密码有点弱,今天下午想着改验证规则,想了想,觉得QQ密码的验证还不错@(呵呵),于是去了QQ注册官网提取规律,先放到网页注册js里面测试一下,验证没问题。于是我开始放服务器端验证,直接给我报错。之前没在意,所以搜索了一下,发现js和PHP的规律性还是有一点区别的。
事实证明,PHP 正则表达式不支持以下 Perl 转义序列:
\L, \l, \N, \P, \p, \U, \u, or \X
PHP正则表达式校验中文问题,感觉PHP不支持perl转义还是挺烦的。
解决这个问题
$str = '教书先生博客blog.oioweb.cn';
echo preg_match("/^[\u4e00-\u9fa5_a-zA-Z0-9]{3,15}$",$strName);
运行上面的代码,看看会显示什么提示信息?
Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 3 in F:\wwwroot\php\test.php on line 2
在UTF-8模式下,允许使用“x{...}”,大括号中的内容为一串十六进制数字。如果其值大于 127,则原创十六进制转义序列 xhh 匹配双字节 UTF-8 字符。
所以,可以这样解决:
preg_match("/^[\x80-\xff_a-zA-Z0-9]{3,15}$",$strName);
代码显示如下:
把我的密码验证正则:(8-16位密码,不能有空格,必须至少收录两个数字、字母或字符))
js:
checkPassword("教书先生博客:blog.oioweb.cn");
function checkPassword(password)
{
var reg=/(?!.*\s)(?!^[\u4e00-\u9fa5]+$)(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^.{8,16}$/;
if(!reg.test(password))
{
alert("8-16位密码,不包含空格,必须包含数字,字母或字符至少两种!");
document.form.password.focus();
return false;
}
return true;
}
PHP:
我希望能有所帮助!