代码如下 | 复制代码 |
preg_match("/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i",$email );
|
代码如下 | 复制代码 |
<?php
function isEmail($email){ if(preg_match("/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i",$email )){ return '是邮箱'; } return '不是邮箱'; } } ?> |
代码如下 | 复制代码 |
if(!preg_match("/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i",$email )){
exit('错误:电子邮箱格式错误。<a href="javascript:history.back(-1);">返回</a>'); } |
代码如下 | 复制代码 |
<script type="text/javascript">
function isEmail(val){
var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/;
if(!myreg.test(val))
return '不是邮箱';
return '是邮箱';
};
alert( isEmail('i@julying.com') );
</script>
|
今天深入的把正则表达式看了一下,总结一下php的正则表达式所使用的函数
preg_match();
preg_match_all();
preg_replace();
preg_filter();
preg_grep();
preg_split();
preg_quote();
基本有这么多吧。
一个个来
先给大家介绍一个 在线 验证 正则表达式的工具
http://regexpal.isbadguy.com/
打开你就明白怎吗用了,我们先来说
preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
这个很简单直接来个例子就明白了
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>example: </b><div align=left>this is a test</div>",
$out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
我们来重点讲讲
preg_replace();
preg_filter();
这两个函数的区别
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$pattern = array('/d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');
echo "preg_filter returns ";
print_r(preg_filter($pattern, $replace, $subject));
echo "preg_replace returns ";
print_r(preg_replace($pattern, $replace, $subject));
很明显我们可以看一下结果
preg_filter returns Array
(
[0] => C:1
[1] => B:C:a
[3] => B:b
)
preg_replace returns Array
(
[0] => C:1
[1] => B:C:a
[2] => 2
[3] => B:b
[4] => 3
[5] => A
[6] => B
[7] => 4
)
这样就很明显了,preg_filter不会保留不匹配的选项,而preg_replace会保留不匹配的选项
preg_grep — 返回匹配模式的数组条目
$array = array("23.32","22","12.009","23.43.43");
print_r(preg_grep("/^(\d+)?\.\d+\.\d+$/",$array));
preg_split — 通过一个正则表达式分隔字符串
这个函数要提得一点是,explode()可以算是这个函数的一个子集
preg_quote — 转义正则表达式字符
最后这个函数就没什么好讲的了。就是不让执行正则表达式,转义一下字符,和自己手动加\转移是一样的
正则匹配可能通过一些通配符来获得有规则的数据了,我们下文来为各位介绍一个php正则匹配字符串中js文件例子,具体的例子如下图所示。将一个网页里面所有引入的js文件都匹配出来,在php中用正则表达式来实现,方式如下:
<?php
header("Content-type:text/html;charset=utf-8");
//匹配一个网页中引入的js文件
$pageContent = file_get_contents('http://www.daixiaorui.com/cat_2.html');
preg_match_all('/<script.*?src\s*=\s*[\"|\'](.*?)[\"|\'].*?>\s*?<\/script>/i', $pageContent, $js);
print_r($js);
其中“src\s*=\s*”表示可以是“src=”也可以是“src = ”这样的;“[\"|\']”表示路径可以是单引号,也可以为双引号;“.*?”尽可能的少重复,匹配最近的位置。
加密:
function string_secret($string)
{
$key = "yadgen";
//密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_,
$lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdef+IJK6/7nopqr89LMmGH012345uv';
//随机找一个数字,并从密锁串中找到一个密锁值
$lockLen = strlen($lockstream);
$lockCount = rand(0,$lockLen-1);
$randomLock = $lockstream[$lockCount];
//结合随机密锁值生成MD5后的密码
$password = md5($key.$randomLock);
//开始对字符串加密
$txtStream = base64_encode($string);
$tmpStream = '';
$i=0;$j=0;$k = 0;
for ($i=0; $i<strlen($txtStream); $i++) {
$k = ($k == strlen($password)) ? 0 : $k;
$j = (strpos($lockstream,$txtStream[$i])+$lockCount+ord($password[$k]))%($lockLen);
$tmpStream .= $lockstream[$j];
$k++;
}
return $tmpStream.$randomLock;
}
解密:
function secret_string($string)
{
$key = "yadgen";
//密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_,
$lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdef+IJK6/7nopqr89LMmGH012345uv';
$lockLen = strlen($lockstream);
//获得字符串长度
$txtLen = strlen($string);
//截取随机密锁值
$randomLock = $string[$txtLen - 1];
//获得随机密码值的位置
$lockCount = strpos($lockstream,$randomLock);
//结合随机密锁值生成MD5后的密码
$password = md5($key.$randomLock);
//开始对字符串解密
$txtStream = substr($string,0,$txtLen-1);
$tmpStream = '';
$i=0;$j=0;$k = 0;
for($i=0; $i<strlen($txtStream); $i++){
$k = ($k == strlen($password)) ? 0 : $k;
$j = strpos($lockstream,$txtStream[$i]) - $lockCount - ord($password[$k]);
while($j < 0){
$j = $j + ($lockLen);
}
$tmpStream .= $lockstream[$j];
$k++;
}
return base64_decode($tmpStream);
}
收藏了正则表达式。可以验证只能输入数字、汉字、英语。分开验证了也可以整合一起验证。但是我是拆分开好了。比较好使。可以单独的验证。经过本人测试可以使用的哦!下面就是php 验证只能输入汉字、英语、数字的代码了
<?php
if(preg_match('/^[0-9]+$/',$str)){
echo '值能输入数字';
}
if(preg_match('/^[a-zA-Z]+$/',$str)){
echo '只能输入英文';
}
验证中文
utf-8下
preg_match("/^[a-z0-9_x80-xff]+[^_]$/g",$a);
if(preg_match("/^[\x7f-\xff]+$/",$str)){
echo '只能输入中文';
}
gbk下:
preg_match("/^[a-z0-9_".chr(0xa1)."-".chr(0xff)."]+[^_]$/",$a)
?>
例子
<?
function checkStr($str){
$output='';
$a=ereg('['.chr(0xa1).'-'.chr(0xff).']', $str);
$b=ereg('[0-9]', $str);
$c=ereg('[a-zA-Z]', $str);
if($a && $b && $c){ $output='汉字数字英文的混合字符串';}
elseif($a && $b && !$c){ $output='汉字数字的混合字符串';}
elseif($a && !$b && $c){ $output='汉字英文的混合字符串';}
elseif(!$a && $b && $c){ $output='数字英文的混合字符串';}
elseif($a && !$b && !$c){ $output='纯汉字';}
elseif(!$a && $b && !$c){ $output='纯数字';}
elseif(!$a && !$b && $c){ $output='纯英文';}
return $output;
}
例子
PHP正则匹配数字,中英文,中横线,下划线,utf-8中文
function check_string($nickname) {
$nickname = trim($nickname);
$pattern = "#([0-9a-zA-Z-_x{4e00}-x{9fa5}]+)#iu";
if (empty($nickname) || !preg_match($pattern, $nickname)) {
return FALSE;
}
if (strlen($nickname) < 4 || strlen($nickname) > 30) {
return FALSE;
}
return TRUE;
}