PHP正则表达式实例收集

2008-04-13 15:32//截取中间字符串的方法

preg_match('/(?:ello)(.*)/', 'hello biafra', $match);
print_r($match);

Array
(
[0] => ello biafra
[1] => biafra
)

preg_match('/(ello)(.*)/', 'hello biafra', $match);
print_r($match);


Array
(
[0] => ello biafra
[1] => ello
[2] => biafra
)


// 取得QQ号
function getQQ($text)
{
if (ereg ("([0-9]{5,9})", $text, $regs)) {
return $regs[1];
}
else {
echo "QQ号无效!";
}

}


//分析的方法:

$content='asdfadfasdfsdfasdfasdfasdfasdfasdfasdfasdfasdf';
$search="//is";
$re=array();
$match=preg_match_all($search,$content,$re);
$count=count($re[0]);
for ($i=0;$i<=$count;$i++){
echo $re[0][$i];
}

//分析域名的正则表达式
$referer = preg_replace("/https?:\/\/([^\/]+).*/i", "\\1", $referer);
$referer = str_replace("www.", "", $referer);


//ubb标签分析的正则表达式

$content="[img]天涯风云[/img]";
$content = eregi_replace("\\[img\\]([^\\[]*)\\[/img\\]","\\1是个笨蛋!",$content);

echo $content;
?>


//QQ论坛偷图片的方法(天涯风云的网址是:捌陆儿们儿们点抠门点屎硬,欢迎常来坐坐!!)


$pathOrUrl='http://bbs.qq.com/allphoto.shtml?url=http://aa.up.topzj.com/data/aa/78/21/6/a/07/01/06/20061231a2_jCqzyK9eyD7H.jpg" target=_blank';

preg_match('/(?:shtml\?url=)(.*)(\" target=_blank$)/', $pathOrUrl, $match);
echo $match[1];
?>


//分析链接id...
$str="feicemc.php?id=fdsfds&str=33333dd";
preg_match("/str=(.+)<\/td>/isU",$str,$out);
echo $out[1];
?>


匹配中文字符的正则表达式: [\u4e00-\u9fa5]

  匹配双字节字符(包括汉字在内): [^\x00-\xff]

  应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

  匹配空行的正则表达式: \n[\s| ]*\r

  匹配HTML标记的正则表达式: /<(.*)>.*<\/>|<(.*) \/>/

  匹配首尾空格的正则表达式: (^\s*)|(\s*$)

  应用:JavaScript中没有像VBscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
}

  利用正则表达式分解和转换IP地址:

  下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

function IP2V(ip) {
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip)) {
return RegExp.*Math.pow(255,3))+RegExp.*Math.pow(255,2))+RegExp.*255+RegExp.*1
}
else {
throw new Error("Not a valid IP address!")
}
}

  不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

  匹配Email地址的正则表达式: \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

  匹配网址URL的正则表达式: http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

  利用正则表达式去除字串中重复的字符的算法程序:

var s="abacabefgeeii"
var s1=s.replace(/(.).*/g,"")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi

  用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/)([^\.]+).*/ig,"")
alert(s)

  利用正则表达式限制网页表单里的文本框输入内容:

  用正则表达式限制只能输入中文:

οnkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="cliPBoardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

  用正则表达式限制只能输入全角字符:

οnkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

  用正则表达式限制只能输入数字:

οnkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

  用正则表达式限制只能输入数字和英文:

οnkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"


在PHP中正则表达式用于复杂字符串的处理。所支持的正则表达式如下:

ereg()

ereg_replace()

eregi()

eregi_replace()

split()

(1)ereg,eregi

这是正规表达式匹配函数,前者是大小写有关匹配,后者则是无关的.

用法:

ereg(正规表达式,字符串,[匹配部分数组名]);

PHP3.0中的正规表达式大体类似于grep中用的.

(2)ereg_replace,eregi_replace

这些是替换函数.

用法:

ereg_replace(正规表达式,替换串,原字符串);

字符串处理函数中有一个strtr,是"翻译"函数,类似于Perl中的tr/.../.../,

用法:

strtr(字符串,"从","到");

例如:

strtr("aaabb","ab","cd")返回"cccdd".

(3)split

与explode函数有些类似,但这次可以在匹配某正规表达式的地方分割字符串.

用法:

split(正规表达式,字符串,[取出前多少项]);


这些函数都使用正则字符串做为第一个参数。PHP使用Posix 1003.2标准所定义的扩展正则字符串。

要查考Posix正则表达式的完整描述请看PHP软件包中regex目录下的man页。


Regular expression examples:

ereg("abc",$string);

/* Returns true if "abc" is found anywhere in $string. */


ereg("^abc",$string);

/* Returns true if "abc" is found at the beginning of $string. */


ereg("abc$",$string);

/* Returns true if "abc" is found at the end of $string. */


eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT);

/* Returns true if client browser is Netscape 2, 3 or MSIE 3. */


ereg("([[:alnum:][:alnum:]]+) ([[:alnum:]]+)",$string,$regs);

/* Places three space separated words into $regs[1], $regs[2] and $regs[3]. */


ereg_replace("^","",$string);

/* Put a tag at the beginning of $string. */


ereg_replace("$","",$string);

/* Put a tag at the end of $string. */


ereg_replace("n","",$string);

/* Get rid of any carriage return characters in $string. */


PHP 的 POSIX 正则表达式实例讲解

// Title : PHP 的 POSIX 正则表达式实例讲解
// Author : Stangly.Wrong

// Function myEreg($p, $s, $preg)
// 可以通过对 $preg 设置决定是否采用 POSIX 还是 兼容perl 的正则匹配
// 本文所采用的ereg()函数对大小定敏感 如果不想去区分大小写,
// 则可以使用 eregi() 函数去替代 ereg() 函数
// 如果匹配成功,则输出 Result is : True
// 否则输出 Result is : False
$title_prefix = ''''例 '''';
$call_num = 1;
$title_suffix = ''''
'''';
function myEreg( $p, $s, $preg = FALSE )
{
global $call_num, $title_prefix, $title_suffix;
echo $title_prefix.$call_num.$title_suffix;
$call_num++;
$function_name = ( $preg ) ? ''''preg_match'''' : ''''ereg'''' ;
echo "\$p = \"$p\"
";
echo "\$s = \"$s\"
";
echo "Call function is : $function_name(\$p, \$s)
";
if ( $function_name($p, $s) )
echo "Result is : True

\r\n";
else
echo "Result is : False

\r\n";

return True;
}

// -----------------------------------------------------------------
// 学习开始 --------------------------------------------------------
// -----------------------------------------------------------------
// 最简单的一种匹配模式
// 从 $s 中寻找 $p 字符串
// 例 1 匹配失败 $p 出现在 $s 中
$p = ''''jear'''';
$s = ''''I love jear forevery!'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 匹配特殊字符 比如 $ . ^ 等,d_无育|]E[aC)%c?.Eug,2C提$国$0x0AwXoyIixp育E垠%属于正则表达式的相关字符
// 使用 对这些字符进行转义
// 例 2 本例匹配将成功,如果剔除 将失败
$p = ''''\$100'''';
$s = ''''I want lend jear $100.'''';
myEreg($p, $s);
// 此处将直接使用 $ 去匹配
// 例 3 匹配失败
$p = ''''$100'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 ^ 匹配
// ^ 指出必须与字符串的开头字符串匹配
// 例 4 本例匹配失败 $p 虽然出现在 $s 中,但不是在开头位置
$p = ''''^jear'''';
myEreg($p, $s);
// 例 5 本例匹配成功,$p 在 $s 的开头位置
$s = ''''jear is my good friend !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 $ 匹配
// $ 指出必须表示它必须与字符串的末尾字符串匹配
// 例 6 本例匹配失败 $p 不是在 $s 的尾部出现
$p = ''''jear$'''';
myEreg($p, $s);
// 例 7 本例匹配成功,$p 在 $s 的尾部出现
$s = ''''I love jear'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 . 匹配
// . 可以匹配任意单个字符
// 例 8 本例匹配成功
$p = ''''je.r'''';
$s = ''''jear'''';
myEreg($p, $s);
// 例 9 匹配失败
$s = ''''jer'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 [] 预定义一个类进行匹配
// 仔细观察 $s 的书写,[g网4^6ajqElB,jnmd与 $p 比较
// 例 10 匹配成功
$p = ''''j[eE]ar'''';
$s = ''''I love jear.'''';
myEreg($p, $s);
// 例 11 匹配成功
$s = ''''I love jEar'''';
myEreg($p, $s);
//例 12 匹配失败 因为 jaar 不符合 $p 所定义的一个类串
$s = ''''I love jaar.'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 [^] 去排除一个预定义的类
// 例 13 匹配成功
// 在进行匹配时,$p 规定了 在 j 字母后只要不出现 abcd ,同时尾部是以
// ar 结束的,即匹配成功
$p = ''''j[^abcd]ar'''';
$s = ''''I love jear just love my self !'''';
myEreg($p, $s);
// 例 14 匹配失败
$s = ''''I love jaar !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 - 方式去在 [] 类中 定义一个范围
// 例 15 匹配成功 因为 预定义类指出字符范围为 0 到 6,而 3th 的 th 前
// 数字 3 处在这一类范围内
$p = ''''[0-6]th'''';
$s = ''''This is the 3th month that i gets along with jear!'''';
myEreg($p, $s);
// 例 16 匹配失败 自己分析一下原因
$s = ''''This is the 9th month that i gets along with jear!'''';
myEreg($p, $s);

// 例 17 匹配成功 使用 ^ 类似于取反运算
$p = ''''[^0-6]'''';
myEreg($p, $s);

// 例 18 匹配成功
$p = ''''je[a-z]r'''';
$s = ''''I love jear!'''';
myEreg($p, $s);

// 例 19 匹配成功 解决大小写匹配
$p = ''''je[a-zA-Z]r'''';
$s = ''''I love jeAr !''''; // or $s = ''''I love jear !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 | 做选择性匹配
// | 可以去做一个选择性的匹配.
// 例 20 匹配成功
$p = ''''jear|cxj|cat'''';
$s = ''''I love jear !'''';
myEreg($p, $s);
// 例 21 匹配成功
$s = ''''I love cxj !'''';
myEreg($p, $s);
// 例 22 匹配成功 组合 [] - 方式去匹配
$p = ''''^([[a-zA-Z]ear)'''';
$s = ''''Jear is my good friend !'''';
myEreg($p, $s);
// 例 23 匹配成功
$s = ''''0ear is my good firend !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 + 号去匹配重复字符,理IS9{ph育+4络}1{供Q提6提X.M*z育u_$p重复次最少是一次
// 例 24 匹配成功 Be+p 指定对于e字符可以最少重复一次,最多重复次不限
$p = ''''Be+p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 25 匹配成功
$s = ''''Beeeep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 ? 号去匹配重复字符, 与 + 号类似,但不规定重复最少次数,
// 规定了最多只能重复一次
// 例 26 匹配成功
$p = ''''Be?p'''';
$s = ''''Bp'''';
myEreg($p, $s);
// 例 27 匹配失败 因为 e 出现了两次
$p = ''''Be?p'''';
$s = ''''Beep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 * 号匹配重复字符, 与 + 号类似, 没有规定最少重复次数
// 例 28 匹配成功
$p = ''''Be*p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 29 匹配成功
$p = ''''Be*p'''';
$s = ''''Bp'''';
myEreg($p, $s);
// 例 30 匹配成功
$p = ''''Be*p'''';
$s = ''''Beeeeeeeeeep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 {n} 号规定出现的具体次数
// 例 31 匹配成功 规定 e 字符必须出现两次
$p = ''''Be{2}p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 32 匹配失败
$s = ''''Beeep'''';
myEreg($p, $s);
// 例 33 匹配失败
$s = ''''Bep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 {n,m} 号规定出现的最少和最大次数
// 例 34 匹配成功 规定 e 字符可以不出现在 $s 里,-网业tx专0@DFTj_ 但最多可以出现 2 次
$p = ''''Be{0,2}p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 35 匹配成功
$s = ''''Bp'''';
myEreg($p, $s);
// 例 36 匹配失败 e 出现次数为3 次,超过规定的2 次限定
$s = ''''Beeep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 {n,} 号规定出现的最少次数,但不规定最多次数
// 例 37 匹配成功
$p = ''''Be{1,}p'''';
$s = ''''Bep'''';
myEreg($p, $s);
// 例 38 匹配成功
$p = ''''Be{1,}p'''';
$s = ''''Beeeeeep'''';
myEreg($p, $s);
// 例 39 匹配失败 e 没有在 $s 中出现,GQ~}QPD&_udz-|供z件@9l']J{WVH*qV而规定必须要出现 1 次
$p = ''''Be{1,}p'''';
$s = ''''Bp'''';
myEreg($p, $s);

// ----------------------------------------------------------------
// () 的使用 联系以下实例 将多个正则联系起来,作为一个单独个体对待
// 例 41 匹配成功
$p = ''''^(good|best)'''';
$s = ''''good'''';
myEreg($p, $s);
// 例 42 匹配成功
$s = ''''best'''';
myEreg($p, $s);

// ----------------------------------------------------------------
// 更多的示例
// ----------------------------------------------------------------
// 例 43 匹配日期示例 0000-00-00 到 9999-99-99 没有规定检查日期的合法性
$p = ''''[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}'''';
$s = ''''2004-12-1'''';
myEreg($p, $s);
?>


正则表达式判断email和URL

echo 'a:'.htmlspecialchars($a);
echo '
a1:';
$a1 = eregi_replace('(^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*.)+[[:alpha:]]{2,3}$)',' \1 ', $a) ;
echo htmlspecialchars($a1);
echo "
a1:$a1";

echo '
a2:';
$a2 = eregi_replace('([[:alnum:]]+://([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}([#\?/\\][^#\?/\\][:space:]][^[:space:]]*)?)',
'\1', $a);
echo htmlspecialchars($a2);
echo "
a2:$a2";
// eregi('^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}$',$a) or die("not a email");
?>









/*
JavaScript表单验证

表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于网页的设计和功能上的改进上。
Validator是基于JavaScript技术的伪静态类和对象的自定义属性,可以对网页中的表单项输入进行相应的验证,允许同一页面中同时验证多个表单,熟悉接口之后也可以对特定的表单项甚至仅仅是某个字符串进行验证。因为是伪静态类,所以在调用时不需要实例化,直接以"类名+.语法+属性或方法名"来调用。此外,Validator还提供3种不同的错误提示模式,以满足不同的需要。
Validator目前可实现的验证类型有:
1.是否为空;
2.中文字符;
3.双字节字符
4.英文;
5.数字;
6.整数;
7.实数;
8.Email地址;
9.使用HTTP协议的网址;
10.电话号码;
11.货币;
12.手机号码;
13.邮政编码;
14.身份证号码(1.05增强);
15.QQ号码;
16.日期;
17.符合安全规则的密码;
18.某项的重复值;
19.两数的关系比较;
20.判断输入值是否在(n, m)区间;
21.输入字符长度限制(可按字节比较);
22.对于具有相同名称的单选按钮的选中判断;
23.限制具有相同名称的多选按钮的选中数目;
24.自定义的正则表达式验证;
25.文件上传格式过滤(1.04新增)。
更新历史:

1.01
修正对12月份的日期验证(感谢 flylg999 )

1.03
修正Range验证类型时将数字当字符串比较的bug(感谢 cncom 和 xtlhnhbb )
修正日期验证(感谢 Papsam )
增加Username验证类型
增加对Phone验证类型时支持分机号

1.04
增加文件格式的过滤,用于上传时限制上传的文件格式

1.05
增强对身份证号码的验证

运行环境(客户端):
在Windows Server 2003下用IE6.0+SP1和Mozilla Firefox 1.0测试通过;
在Lunix RedHat 9下的Netscape测试通过;
Validator 完整代码:

*/



/*
使用方法:
验证表单
在表单中加上onsubmit事件,触发调用Validaotor的Validate方法,代码示例:
CODE:


... ...

//---------------------

Validate方法有两个可选参数,第一个为表单对象,如果是写在表单的onsubmit事件中,可以用this指代当前表单,默认值为事件源对象;第二个参数为错误提示模式,可选值为1,2和3,默认值为1。省略第二个参数时相当于使用Validate(objForm,1),省略第一个参数时相当于Validate(this,1)。注意,不可以省略第一个参数而只写第二个参数,Validate(,2)是错误的用法。
具体的实例
1. 验证输入是否Email地址

2. 如果对Email地址有特殊的限制的话

3. Range 这个范围的使用方法



[说明]Validator的必要属性是dataType和msg(区分大小写),然后根据dataType值的不同,会引发出不同的属性。因为程序中已经集成Email地址格式的正则,所以可以直接用dateType="Email"进行验证,如果对Email地址的格式有不同的限制,可以用自定义的正则来验证(参考第二段代码)。

如果在使用过程中有发现其他问题或者对使用方法有疑问可以到Javascript论坛来讨论,URL:[url=http://www.javascript.com.cn/bbs/htm_data/10/0511/1039.html]http://www.javascript.com.cn/bbs/htm_data/10/0511/1039.html[/url) ([[:alnum:]]+) ([[:alnum:]]+)",$string,$regs);

/* Places three space separated words into $regs[1], $regs[2] and $regs[3]. */


ereg_replace("^","",$string);

/* Put a tag at the beginning of $string. */


ereg_replace("$","",$string);

/* Put a tag at the end of $string. */


ereg_replace("n","",$string);

/* Get rid of any carriage return characters in $string. */


PHP 的 POSIX 正则表达式实例讲解

// Title : PHP 的 POSIX 正则表达式实例讲解
// Author : Stangly.Wrong

// Function myEreg($p, $s, $preg)
// 可以通过对 $preg 设置决定是否采用 POSIX 还是 兼容perl 的正则匹配
// 本文所采用的ereg()函数对大小定敏感 如果不想去区分大小写,
// 则可以使用 eregi() 函数去替代 ereg() 函数
// 如果匹配成功,则输出 Result is : True
// 否则输出 Result is : False
$title_prefix = ''''例 '''';
$call_num = 1;
$title_suffix = ''''
'''';
function myEreg( $p, $s, $preg = FALSE )
{
global $call_num, $title_prefix, $title_suffix;
echo $title_prefix.$call_num.$title_suffix;
$call_num++;
$function_name = ( $preg ) ? ''''preg_match'''' : ''''ereg'''' ;
echo "\$p = \"$p\"
";
echo "\$s = \"$s\"
";
echo "Call function is : $function_name(\$p, \$s)
";
if ( $function_name($p, $s) )
echo "Result is : True

\r\n";
else
echo "Result is : False

\r\n";

return True;
}

// -----------------------------------------------------------------
// 学习开始 --------------------------------------------------------
// -----------------------------------------------------------------
// 最简单的一种匹配模式
// 从 $s 中寻找 $p 字符串
// 例 1 匹配失败 $p 出现在 $s 中
$p = ''''jear'''';
$s = ''''I love jear forevery!'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 匹配特殊字符 比如 $ . ^ 等,d_无育|]E[aC)%c?.Eug,2C提$国$0x0AwXoyIixp育E垠%属于正则表达式的相关字符
// 使用 对这些字符进行转义
// 例 2 本例匹配将成功,如果剔除 将失败
$p = ''''\$100'''';
$s = ''''I want lend jear $100.'''';
myEreg($p, $s);
// 此处将直接使用 $ 去匹配
// 例 3 匹配失败
$p = ''''$100'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 ^ 匹配
// ^ 指出必须与字符串的开头字符串匹配
// 例 4 本例匹配失败 $p 虽然出现在 $s 中,但不是在开头位置
$p = ''''^jear'''';
myEreg($p, $s);
// 例 5 本例匹配成功,$p 在 $s 的开头位置
$s = ''''jear is my good friend !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 $ 匹配
// $ 指出必须表示它必须与字符串的末尾字符串匹配
// 例 6 本例匹配失败 $p 不是在 $s 的尾部出现
$p = ''''jear$'''';
myEreg($p, $s);
// 例 7 本例匹配成功,$p 在 $s 的尾部出现
$s = ''''I love jear'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 . 匹配
// . 可以匹配任意单个字符
// 例 8 本例匹配成功
$p = ''''je.r'''';
$s = ''''jear'''';
myEreg($p, $s);
// 例 9 匹配失败
$s = ''''jer'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 [] 预定义一个类进行匹配
// 仔细观察 $s 的书写,[g网4^6ajqElB,jnmd与 $p 比较
// 例 10 匹配成功
$p = ''''j[eE]ar'''';
$s = ''''I love jear.'''';
myEreg($p, $s);
// 例 11 匹配成功
$s = ''''I love jEar'''';
myEreg($p, $s);
//例 12 匹配失败 因为 jaar 不符合 $p 所定义的一个类串
$s = ''''I love jaar.'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 [^] 去排除一个预定义的类
// 例 13 匹配成功
// 在进行匹配时,$p 规定了 在 j 字母后只要不出现 abcd ,同时尾部是以
// ar 结束的,即匹配成功
$p = ''''j[^abcd]ar'''';
$s = ''''I love jear just love my self !'''';
myEreg($p, $s);
// 例 14 匹配失败
$s = ''''I love jaar !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 - 方式去在 [] 类中 定义一个范围
// 例 15 匹配成功 因为 预定义类指出字符范围为 0 到 6,而 3th 的 th 前
// 数字 3 处在这一类范围内
$p = ''''[0-6]th'''';
$s = ''''This is the 3th month that i gets along with jear!'''';
myEreg($p, $s);
// 例 16 匹配失败 自己分析一下原因
$s = ''''This is the 9th month that i gets along with jear!'''';
myEreg($p, $s);

// 例 17 匹配成功 使用 ^ 类似于取反运算
$p = ''''[^0-6]'''';
myEreg($p, $s);

// 例 18 匹配成功
$p = ''''je[a-z]r'''';
$s = ''''I love jear!'''';
myEreg($p, $s);

// 例 19 匹配成功 解决大小写匹配
$p = ''''je[a-zA-Z]r'''';
$s = ''''I love jeAr !''''; // or $s = ''''I love jear !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 | 做选择性匹配
// | 可以去做一个选择性的匹配.
// 例 20 匹配成功
$p = ''''jear|cxj|cat'''';
$s = ''''I love jear !'''';
myEreg($p, $s);
// 例 21 匹配成功
$s = ''''I love cxj !'''';
myEreg($p, $s);
// 例 22 匹配成功 组合 [] - 方式去匹配
$p = ''''^([[a-zA-Z]ear)'''';
$s = ''''Jear is my good friend !'''';
myEreg($p, $s);
// 例 23 匹配成功
$s = ''''0ear is my good firend !'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 + 号去匹配重复字符,理IS9{ph育+4络}1{供Q提6提X.M*z育u_$p重复次最少是一次
// 例 24 匹配成功 Be+p 指定对于e字符可以最少重复一次,最多重复次不限
$p = ''''Be+p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 25 匹配成功
$s = ''''Beeeep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 ? 号去匹配重复字符, 与 + 号类似,但不规定重复最少次数,
// 规定了最多只能重复一次
// 例 26 匹配成功
$p = ''''Be?p'''';
$s = ''''Bp'''';
myEreg($p, $s);
// 例 27 匹配失败 因为 e 出现了两次
$p = ''''Be?p'''';
$s = ''''Beep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 * 号匹配重复字符, 与 + 号类似, 没有规定最少重复次数
// 例 28 匹配成功
$p = ''''Be*p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 29 匹配成功
$p = ''''Be*p'''';
$s = ''''Bp'''';
myEreg($p, $s);
// 例 30 匹配成功
$p = ''''Be*p'''';
$s = ''''Beeeeeeeeeep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 {n} 号规定出现的具体次数
// 例 31 匹配成功 规定 e 字符必须出现两次
$p = ''''Be{2}p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 32 匹配失败
$s = ''''Beeep'''';
myEreg($p, $s);
// 例 33 匹配失败
$s = ''''Bep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 {n,m} 号规定出现的最少和最大次数
// 例 34 匹配成功 规定 e 字符可以不出现在 $s 里,-网业tx专0@DFTj_ 但最多可以出现 2 次
$p = ''''Be{0,2}p'''';
$s = ''''Beep'''';
myEreg($p, $s);
// 例 35 匹配成功
$s = ''''Bp'''';
myEreg($p, $s);
// 例 36 匹配失败 e 出现次数为3 次,超过规定的2 次限定
$s = ''''Beeep'''';
myEreg($p, $s);

// -----------------------------------------------------------------
// 使用 {n,} 号规定出现的最少次数,但不规定最多次数
// 例 37 匹配成功
$p = ''''Be{1,}p'''';
$s = ''''Bep'''';
myEreg($p, $s);
// 例 38 匹配成功
$p = ''''Be{1,}p'''';
$s = ''''Beeeeeep'''';
myEreg($p, $s);
// 例 39 匹配失败 e 没有在 $s 中出现,GQ~}QPD&_udz-|供z件@9l']J{WVH*qV而规定必须要出现 1 次
$p = ''''Be{1,}p'''';
$s = ''''Bp'''';
myEreg($p, $s);

// ----------------------------------------------------------------
// () 的使用 联系以下实例 将多个正则联系起来,作为一个单独个体对待
// 例 41 匹配成功
$p = ''''^(good|best)'''';
$s = ''''good'''';
myEreg($p, $s);
// 例 42 匹配成功
$s = ''''best'''';
myEreg($p, $s);

// ----------------------------------------------------------------
// 更多的示例
// ----------------------------------------------------------------
// 例 43 匹配日期示例 0000-00-00 到 9999-99-99 没有规定检查日期的合法性
$p = ''''[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}'''';
$s = ''''2004-12-1'''';
myEreg($p, $s);
?>


正则表达式判断email和URL

echo 'a:'.htmlspecialchars($a);
echo '
a1:';
$a1 = eregi_replace('(^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*.)+[[:alpha:]]{2,3}$)',' \1 ', $a) ;
echo htmlspecialchars($a1);
echo "
a1:$a1";

echo '
a2:';
$a2 = eregi_replace('([[:alnum:]]+://([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}([#\?/\\][^#\?/\\][:space:]][^[:space:]]*)?)',
'\1', $a);
echo htmlspecialchars($a2);
echo "
a2:$a2";
// eregi('^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*\.)+[[:alpha:]]{2,3}$',$a) or die("not a email");
?>









/*
JavaScript表单验证

表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于网页的设计和功能上的改进上。
Validator是基于JavaScript技术的伪静态类和对象的自定义属性,可以对网页中的表单项输入进行相应的验证,允许同一页面中同时验证多个表单,熟悉接口之后也可以对特定的表单项甚至仅仅是某个字符串进行验证。因为是伪静态类,所以在调用时不需要实例化,直接以"类名+.语法+属性或方法名"来调用。此外,Validator还提供3种不同的错误提示模式,以满足不同的需要。
Validator目前可实现的验证类型有:
1.是否为空;
2.中文字符;
3.双字节字符
4.英文;
5.数字;
6.整数;
7.实数;
8.Email地址;
9.使用HTTP协议的网址;
10.电话号码;
11.货币;
12.手机号码;
13.邮政编码;
14.身份证号码(1.05增强);
15.QQ号码;
16.日期;
17.符合安全规则的密码;
18.某项的重复值;
19.两数的关系比较;
20.判断输入值是否在(n, m)区间;
21.输入字符长度限制(可按字节比较);
22.对于具有相同名称的单选按钮的选中判断;
23.限制具有相同名称的多选按钮的选中数目;
24.自定义的正则表达式验证;
25.文件上传格式过滤(1.04新增)。
更新历史:

1.01
修正对12月份的日期验证(感谢 flylg999 )

1.03
修正Range验证类型时将数字当字符串比较的bug(感谢 cncom 和 xtlhnhbb )
修正日期验证(感谢 Papsam )
增加Username验证类型
增加对Phone验证类型时支持分机号

1.04
增加文件格式的过滤,用于上传时限制上传的文件格式

1.05
增强对身份证号码的验证

运行环境(客户端):
在Windows Server 2003下用IE6.0+SP1和Mozilla Firefox 1.0测试通过;
在Lunix RedHat 9下的Netscape测试通过;
Validator 完整代码:

*/



/*
使用方法:
验证表单
在表单中加上onsubmit事件,触发调用Validaotor的Validate方法,代码示例:
CODE:


... ...

//---------------------

Validate方法有两个可选参数,第一个为表单对象,如果是写在表单的onsubmit事件中,可以用this指代当前表单,默认值为事件源对象;第二个参数为错误提示模式,可选值为1,2和3,默认值为1。省略第二个参数时相当于使用Validate(objForm,1),省略第一个参数时相当于Validate(this,1)。注意,不可以省略第一个参数而只写第二个参数,Validate(,2)是错误的用法。
具体的实例
1. 验证输入是否Email地址

2. 如果对Email地址有特殊的限制的话

3. Range 这个范围的使用方法



[说明]Validator的必要属性是dataType和msg(区分大小写),然后根据dataType值的不同,会引发出不同的属性。因为程序中已经集成Email地址格式的正则,所以可以直接用dateType="Email"进行验证,如果对Email地址的格式有不同的限制,可以用自定义的正则来验证(参考第二段代码)。

如果在使用过程中有发现其他问题或者对使用方法有疑问可以到Javascript论坛来讨论,URL:[url=http://www.javascript.com.cn/bbs/htm_data/10/0511/1039.html]http://www.javascript.com.cn/bbs/htm_data/10/0511/1039.html[/url]

*/

你可能感兴趣的:(正则表达式,正则表达式,PHP,QQ,JavaScript,EXT,ViewUI)