首页 > 编程技术 > php

PHP正则匹配指定长度字符必须有数字、字母、下划线

发布时间:2016-11-25 17:42

本文章给大家介绍一个PHP正则匹配指定长度字符必须有数字、字母、下划线组成,现在我们先来看一个简单正则,规则是:6到16位,这样就可以了{6,16}

任意的字符6到16位是.{6,16}

只有 数字、字母、下划线组成 就是[0-9_a-zA-Z]

 总的加在一起就椒 ^[_0-9a-z]{6,16}$

 代码如下 复制代码

<?php
function ispassword($str) {
 if (preg_match('/^[_0-9a-z]{6,16}$/i',$str)){
  return true;
 }else {
  return false;
 }
}
$password = 'abcde@';
if(ispassword($password)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  不符合

 

echo '<br>';
$password = 'abcdeasdas_1324';
if(ispassword($password)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  符合
?>

例2

 代码如下 复制代码


$action = trim($_get['action']);
if($action == "sub")
{
    $str = $_post['dir'];   
    //if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."a-za-z0-9_]+$/",$str)) //gb2312汉字字母数字下划线正则表达式
    if(!preg_match("/^[x{4e00}-x{9fa5}a-za-z0-9_]+$/u",$str))   //utf-8汉字字母数字下划线正则表达式
    {  
        echo "<font color=red>您输入的[".$str."]含有违法字符</font>";  
    }
    else
    {
        echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>";  
    }
}
?>
<form method="post" action="">
输入字符(数字,字母,汉字,下划线):
    <input type="text" name="dir" value="">
    <input type="submit" value="提交">
</form>

本文章来给大家介绍php 正则表达式 匹配以“XXX”开头不能以“YYY”结尾,下面的实例我们以abc开头与 首先来是abc开头, 没有想的就是 ^abc 以abc开头了,不能以“xyz”结尾


后面要有一串的字符串

一般我用[^…………]这样来否定,当然也别的写法

 
既然是否定“x”、“y”、“z”

就是[^xyz]

 
整个写来就是

^abc[^xyz]*$

 
PHP测试:

 代码如下 复制代码

<?php
$str = 'abcdef124f';
$search = '/^abc[^xyz]*$/';

if(preg_match($search,$str)) {
 echo $str.' 符合<br />';
}else {
 echo $str.' 不符合<br />';
}
//output abcdef124f 符合


$str = 'abcdef12x124';
if(preg_match($search,$str)) {
 echo $str.' 符合<br />';
}else {
 echo $str.' 不符合<br />';
}
//output abcdef12x124 不符合

?>

有时我们注册时希望用户可以是中文也可以是英文注册,这里我们的要用户名如何正则验证呢,下面我来给大家介绍一个用户名正则表达式、含中文、长度为4-16个字符实例。

[a-zA-Zxa0-xff_]小写大写英文,或者中文,或者下划线开头
[0-9a-zA-Zxa0-xff_]后面的内容可以是小写大写中文数字下划线
[0-9a-zA-Zxa0-xff_]{3,15}后面的内容重复3-15次

 
所以整个正则表达式为[a-zA-Zxa0-xff_][0-9a-zA-Zxa0-xff_]{3,15}
也可以加上开头结尾锚记^[a-zA-Zxa0-xff_][0-9a-zA-Zxa0-xff_]{3,15}$

 代码如下 复制代码

<?php
function isusername($str) {
 if (preg_match('/^[a-zA-Zxa0-xff_][0-9a-zA-Zxa0-xff_]{3,15}$/',$str)){
  return true;
 }else {
  return false;
 }
}

$username = 'abcde123';
if(isusername($username)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  符合


echo '<br>';
$username = '1abcdeasdas_1324';
if(isusername($username)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  不符合
?>

如果你是普通的用户我我们就不需要上面的实例了,由字母a~z(不区分大小写)、数字0~9、减号或下划线组成
只能以数字或字母开头和结尾 用户名长度为4~18个字符

 代码如下 复制代码

^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za-z0-9]{1}$

用户名为大写字母小写字母或下划线,并以字母开头,长度为6-20

 代码如下 复制代码

^[a-za-z][wd_]{5,19}

我想正则匹配邮箱地址这个应用我们做web开的几乎都使用到吧,下面我来给大家介绍在邮箱地址正则匹配时的一些问题分析,有需要更深入理解邮箱地址正则的朋友可进入参考。

有个php正则表达式邮箱问题

 代码如下 复制代码

$a='/([w._]{2,10})@(w{1,}).([a-z]{2,4})/';
$b='1412424545645454545454545k@qq.com';

if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件不合法啊";
}

为何上面的输出为合法???{2,10}这里不是只能放2到10位数字吗 这里已经超出了10位了

 这个正则是能匹配的,匹配到这样这部分 '545454545k@qq.com'
前面部分的1412424545645454不匹配,所以还是合法的。
你想要匹配一整段正确可以改成这样

 代码如下 复制代码
$a='/^([w._]{2,10})@(w{1,}).([a-z]{2,4})$/';


 要注意你的正则

 代码如下 复制代码
  /([w._]{2,10})@(w{1,}).([a-z]{2,4})/

他没有断言,意味着只要字符串中有符合的部分就匹配
因此{2,10}是只能2到10位匹配,但不针对整个字符串只要有一部分符合就匹配了。

你要判断一整段字符串是否都匹配就要用断言。如^ $

 代码如下 复制代码
/^([w._]{2,10})@(w{1,}).([a-z]{2,4})$/

注意头和尾加上了^ $

 

 代码如下 复制代码
$a='/^([w._]{2,10})@(w{1,}).([a-z]{2,4})$/';
$b='1412424545645454545454545k@qq.com';
if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件不合法啊";
}

好了下面我来进行更完善写法

PHP 邮箱验证正则表达式 新手实例:

 代码如下 复制代码

<?php
function isEmail($email){
if(preg_match(“/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i”,$email )){
return ‘是邮箱’;
}      else{
return ‘不是邮箱’;
}
}
?>

Javascript(js) 邮箱验证正则表达式:

myreg = /^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,4}$/;
这个可以验证 形如:i@julying.com ,i@i.com 这种邮箱
Javascript(js) 邮箱验证正则表达式 新手实例:
<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 正则匹配字符串URL地址与域名代码,有需要了解的朋友可进入参考参考。

匹配域名有以下的格式要求:

1、域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。

2、各级域名之间用实点(.)连接,三级域名的长度不能超过20个字符。

3、由多个标号组成的完整域名总共不超过255个字符。

 
所以匹配域名的正则要

1、由英文数字 和 “_”组成    [-a-z0-9]

2、每级要以“.”连接

3、三级不能域名长度不超过20 {1,20}

 
测试如下格式:

 代码如下 复制代码
<?php
$url = 'www.111cn.net';
$search = '/---正则N---/';
if(preg_match($search,$url)){
 echo '匹配';
}else {
 echo '不匹配';
}
?>

 

先从网上总结的几个常见的

正则1

b([a-z0-9]+(-[a-z0-9]+)*.)+[a-z]{2,}b

错误匹配:长度>60

 

正则2

 代码如下 复制代码

^(([^-][a-z0-9A-Z-_]+.)*)[^-][a-z0-9A-Z-_]+(.[a-zA-Z]{2,4}){1,2}$

错误匹配:长度>60

错误匹配:www.te_st.com

 

正则3

 代码如下 复制代码

(([wd-_]+.):?[^-_])+w{2,4}

不匹配:www.111cn.net.cn

错误匹配:www.te_st.com

 

正则4

 代码如下 复制代码

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?

 暂无错误

 

 正则5

 代码如下 复制代码

(?<=.)([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?.)+[a-zA-Z]{2,6}

 不匹配二级域名

 

 正则6

 代码如下 复制代码

([a-z0-9][a-z0-9-]*?.(?:com|cn|net|org|gov|info|la|cc|co)(?:.(?:cn|jp))?)$

 很多顶级域名不匹配

 代码如下 复制代码

<?php
$search = '~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?~i';
$url = 'http://www.111cn.net/pub/ietf/uri/#Gonn';
$url = trim($url);
preg_match_all($search, $url ,$rr);
printf("<p>输出URL数据为:</p><pre>%s</pre>n",var_export( $rr ,TRUE));

/*
各分组如下
      $1 = http:
      $2 = http
      $3 = //www.111cn.net
      $4 = www.111cn.net
      $5 = /pub/ietf/uri/
      $6 = <undefined>
      $7 = <undefined>
      $8 = #Gonn
      $9 = Gonn
*/
?>

标签:[!--infotagslink--]

您可能感兴趣的文章: