`
anson_xu
  • 浏览: 517261 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

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号无效!";
     }

}


//分析<img>的方法:
<?php

$content='asdfadfasdfsdf<img src="../../img/200703082sdd1PGmffX.jpg">asdfasdfasdf<img src="../../img/2007030asdf23211PGmffX.jpg"><img src="../../img/2007030822asdfGmffX.jpg">asdfasdfasdfasdfasdf';
$search="/<img src=(.+?)>/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标签分析的正则表达式
<?php

$content="";
$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="<td>feicemc.php?id=fdsfds&str=33333dd</td>";
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)
  
  利用正则表达式限制网页表单里的文本框输入内容:
  
  用正则表达式限制只能输入中文:
  
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="cliPBoardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
  
  用正则表达式限制只能输入全角字符:
  
onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
  
  用正则表达式限制只能输入数字:
  
onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
  
  用正则表达式限制只能输入数字和英文:
  
onkeyup="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 正则表达式实例讲解

<?php
// 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 = ''''<br />'''';
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\" <br />";
    echo "\$s = \"$s\" <br />";
    echo "Call function is : $function_name(\$p, \$s) <br />";
    if ( $function_name($p, $s) )
        echo "Result is : True <br /><br />\r\n";
    else
        echo "Result is : False <br /><br />\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
<body onload="f.a.select();">
<?php
echo 'a:'.htmlspecialchars($a);
echo '<br>a1:';
$a1 = eregi_replace('(^[_.][:alnum:]-]+@([[:alnum:]][[:alnum:]-]*.)+[[:alpha:]]{2,3}$)',' <a href="mailto:\1">\1</a> ', $a) ;
echo htmlspecialchars($a1);
echo "<br>a1:$a1";

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

<form name="f">
<input name="a" value="<?php echo $a; ?>">
<input type="submit" >
</form>

</body>  


/*
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 完整代码:

*/

<script>
/*************************************************
Validator v1.05
code by 我佛山人
[email=wfsr@msn.com]wfsr@msn.com[/email]
*************************************************/
Validator = {
Require : /.+/,
Email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
Phone : /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,
Mobile : /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/,
Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
IdCard : "this.IsIdCard(value)",
Currency : /^\d+(\.\d+)?$/,
Number : /^\d+$/,
Zip : /^[1-9]\d{5}$/,
QQ : /^[1-9]\d{4,8}$/,
Integer : /^[-\+]?\d+$/,
Double : /^[-\+]?\d+(\.\d+)?$/,
English : /^[A-Za-z]+$/,
Chinese : /^[\u0391-\uFFE5]+$/,
Username : /^[a-z]\w{3,}$/i,
UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
IsSafe : function(str){return !this.UnSafe.test(str);},
SafeString : "this.IsSafe(value)",
Filter : "this.DoFilter(value, getAttribute('accept'))",
Limit : "this.limit(value.length,getAttribute('min'), getAttribute('max'))",
LimitB : "this.limit(this.LenB(value), getAttribute('min'), getAttribute('max'))",
Date : "this.IsDate(value, getAttribute('min'), getAttribute('format'))",
Repeat : "value == document.getElementsByName(getAttribute('to'))[0].value",
Range : "getAttribute('min') < (value|0) && (value|0) < getAttribute('max')",
Compare : "this.compare(value,getAttribute('operator'),getAttribute('to'))",
Custom : "this.Exec(value, getAttribute('regexp'))",
Group : "this.MustChecked(getAttribute('name'), getAttribute('min'), getAttribute('max'))",
ErrorItem : [document.forms[0]],
ErrorMessage : ["以下原因导致提交失败:\t\t\t\t"],
Validate : function(theForm, mode){
var obj = theForm || event.srcElement;
var count = obj.elements.length;
this.ErrorMessage.length = 1;
this.ErrorItem.length = 1;
this.ErrorItem[0] = obj;
for(var i=0;i<count;i++){
with(obj.elements[i]){
var _dataType = getAttribute("dataType");
if(typeof(_dataType) == "object" || typeof(this[_dataType]) == "undefined") continue;
this.ClearState(obj.elements[i]);
if(getAttribute("require") == "false" && value == "") continue;
switch(_dataType){
case "IdCard" :
case "Date" :
case "Repeat" :
case "Range" :
case "Compare" :
case "Custom" :
case "Group" :
case "Limit" :
case "LimitB" :
case "SafeString" :
case "Filter" :
if(!eval(this[_dataType])) {
this.AddError(i, getAttribute("msg"));
}
break;
default :
if(!this[_dataType].test(value)){
this.AddError(i, getAttribute("msg"));
}
break;
}
}
}
if(this.ErrorMessage.length > 1){
mode = mode || 1;
var errCount = this.ErrorItem.length;
switch(mode){
case 2 :
for(var i=1;i<errCount;i++)
this.ErrorItem[i].style.color = "red";
case 1 :
alert(this.ErrorMessage.join("\n"));
this.ErrorItem[1].focus();
break;
case 3 :
for(var i=1;i<errCount;i++){
try{
var span = document.createElement("SPAN");
span.id = "__ErrorMessagePanel";
span.style.color = "red";
this.ErrorItem[i].parentNode.appendChild(span);
span.innerHTML = this.ErrorMessage[i].replace(/\d+:/,"*");
}
catch(e){alert(e.description);}
}
this.ErrorItem[1].focus();
break;
default :
alert(this.ErrorMessage.join("\n"));
break;
}
return false;
}
return true;
},
limit : function(len,min, max){
min = min || 0;
max = max || Number.MAX_VALUE;
return min <= len && len <= max;
},
LenB : function(str){
return str.replace(/[^\x00-\xff]/g,"**").length;
},
ClearState : function(elem){
with(elem){
if(style.color == "red")
style.color = "";
var lastNode = parentNode.childNodes[parentNode.childNodes.length-1];
if(lastNode.id == "__ErrorMessagePanel")
parentNode.removeChild(lastNode);
}
},
AddError : function(index, str){
this.ErrorItem[this.ErrorItem.length] = this.ErrorItem[0].elements[index];
this.ErrorMessage[this.ErrorMessage.length] = this.ErrorMessage.length + ":" + str;
},
Exec : function(op, reg){
return new RegExp(reg,"g").test(op);
},
compare : function(op1,operator,op2){
switch (operator) {
case "NotEqual":
return (op1 != op2);
case "GreaterThan":
return (op1 > op2);
case "GreaterThanEqual":
return (op1 >= op2);
case "LessThan":
return (op1 < op2);
case "LessThanEqual":
return (op1 <= op2);
default:
return (op1 == op2);
}
},
MustChecked : function(name, min, max){
var groups = document.getElementsByName(name);
var hasChecked = 0;
min = min || 1;
max = max || groups.length;
for(var i=groups.length-1;i>=0;i--)
if(groups[i].checked) hasChecked++;
return min <= hasChecked && hasChecked <= max;
},
DoFilter : function(input, filter){
return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, filter.split(/\s*,\s*/).join("|")), "gi").test(input);
},
IsIdCard : function(number){
var date, Ai;
var verify = "10x98765432";
var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var area = ['','','','','','','','','','','','北京','天津','河北','山西','内蒙古','','','','','','辽宁','吉林','黑龙江','','','','','','','','上海','江苏','浙江','安微','福建','江西','山东','','','','河南','湖北','湖南','广东','广西','海南','','','','重庆','四川','贵州','云南','西藏','','','','','','','陕西','甘肃','青海','宁夏','新疆','','','','','','台湾','','','','','','','','','','香港','澳门','','','','','','','','','国外'];
var re = number.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/i);
if(re == null) return false;
if(re[1] >= area.length || area[re[1]] == "") return false;
if(re[2].length == 12){
Ai = number.substr(0, 17);
date = [re[9], re[10], re[11]].join("-");
}
else{
Ai = number.substr(0, 6) + "19" + number.substr(6);
date = ["19" + re[4], re[5], re[6]].join("-");
}
if(!this.IsDate(date, "ymd")) return false;
var sum = 0;
for(var i = 0;i<=16;i++){
sum += Ai.charAt(i) * Wi[i];
}
Ai += verify.charAt(sum%11);
return (number.length ==15 || number.length == 18 && number == Ai);
},
IsDate : function(op, formatString){
formatString = formatString || "ymd";
var m, year, month, day;
switch(formatString){
case "ymd" :
m = op.match(new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$"));
if(m == null ) return false;
day = m[6];
month = m[5]*1;
year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
break;
case "dmy" :
m = op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));
if(m == null ) return false;
day = m[1];
month = m[3]*1;
year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
break;
default :
break;
}
if(!parseInt(month)) return false;
month = month==0 ?12:month;
var date = new Date(year, month-1, day);
return (typeof(date) == "object" && year == date.getFullYear() && month == (date.getMonth()+1) && day == date.getDate());
function GetFullYear(y){return ((y<30 ? "20" : "19") + y)|0;}
}
}
</script>

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

<form action="your_application_page" method="post">
... ...
</form>
//---------------------

Validate方法有两个可选参数,第一个为表单对象,如果是写在表单的onsubmit事件中,可以用this指代当前表单,默认值为事件源对象;第二个参数为错误提示模式,可选值为1,2和3,默认值为1。省略第二个参数时相当于使用Validate(objForm,1),省略第一个参数时相当于Validate(this,1)。注意,不可以省略第一个参数而只写第二个参数,Validate(,2)是错误的用法。
////////////具体的实例
1. 验证输入是否Email地址
<input name="Email" dataType="Email" msg="信箱格式不正确">
2. 如果对Email地址有特殊的限制的话
<input name="Email" dataType="Custom" regexp="^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$" msg="信箱格式不正确">
3. Range 这个范围的使用方法
<input name="Range"   dataType="Range" msg="超出了范围18 - 28 " min="18" max="28">


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

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

*/


分享到:
评论

相关推荐

    php常用正则表达式大全-超经典!!

    ”收集了大量的PHP正则表达式实例,旨在帮助开发者更高效地处理字符串。 1. **基础正则概念** - `.`:匹配任意单个字符,除了换行符。 - `*`:匹配前面的子表达式零次或多次。 - `+`:匹配前面的子表达式一次或...

    php中常用的正则表达式的介绍及应用实例代码

    更全面的实例,可以参考最常用的PHP正则表达式收集整理//www.jb51.net/article/14049.htm php 正则表达式小结//www.jb51.net/article/19831.htm PHP 正则表达式的几则使用技巧//www.jb51.net/article/19832.htm以下...

    php面试题目

    在PHP中,正则表达式的处理可以通过两种不同的风格实现:POSIX风格和Perl风格。这两种风格主要通过不同的函数集来体现。 - **POSIX风格**:基于POSIX标准,使用`ereg`系列函数。例如: - `ereg()`: 进行正则表达式...

    PHP网站实例开发源码——HMJ采集器.zip

    熟练掌握正则表达式可以帮助开发者更高效地定位和抽取目标内容。 5. **数据存储**:采集到的信息通常需要存储起来,这可能涉及到数据库操作。PHP与MySQL、PDO(PHP Data Objects)或其他数据库系统的交互是必不可少...

    PHP实例开发源码—云集科技笑话爬虫WAP简单版 php版.zip

    4. **正则表达式**:除了DOM解析,可能还会用到正则表达式(Regular Expression)来进一步筛选和格式化数据。正则表达式是用于匹配字符串模式的强大工具,可以用于查找、替换或提取特定格式的数据。 5. **数据存储*...

    PHP实例开发源码——bt种子爬虫程序源码 php版.zip

    在本压缩包“PHP实例开发源码——bt种子爬虫程序源码 php版.zip”中,包含了一个基于PHP实现的BT种子爬虫程序。这个程序主要用于自动化地从互联网上抓取BT种子信息,通常用于数据收集、数据分析或者BT下载站的建立。...

    PHP实例开发源码—企管美图爬虫源码 php版.zip

    3. **正则表达式**:虽然DOM解析更推荐用于解析HTML,但在某些情况下,正则表达式(preg_match系列函数)也可以用于快速匹配特定模式的字符串,如提取URL。 4. **文件下载与存储**:爬取到的图片需要下载并存储在...

    php实例代码

    综上所述,这些PHP代码实例不仅提供了实际开发中常用的几种功能实现,还涉及到了随机性、字符串操作、正则表达式匹配、文件系统操作等多个方面,对于学习和掌握PHP编程语言具有很高的参考价值。

    PHP实例开发源码—7x8Y中英文对照词典(php爬虫).zip

    3. **正则表达式**:使用preg_match_all等函数配合正则表达式,可以精确匹配和提取网页中的特定字符串,如单词和翻译。 4. **数据存储**:将抓取到的词汇对存储在数据库(如MySQL)中,或者直接保存为文件,便于...

    PHP实现小偷程序实例

    通过正则表达式和数据库操作的结合,这个脚本可以自动化地从一个网站上收集数据,并存储在本地数据库中。整个过程不仅涉及到了网络爬虫的技术实现,还涉及到了数据存储和网页内容解析的多个方面,展示了如何从零开始...

    ASP实例开发源码-短信大全爬虫 php版 v1.0.zip

    《ASP实例开发源码-短信大全爬虫 php版 v1.0》是一个基于ASP和PHP技术的短信爬虫项目,旨在收集和整理网络上的短信资源。这个项目的主要目的是为开发者提供一个学习和研究网络数据抓取的实例,帮助他们更好地理解和...

    PHP实例开发源码—小爬虫php留言板.zip

    然后,开发者可能使用正则表达式或者DOM解析库(如DOMDocument或SimpleXMLElement)来解析HTML,提取所需信息。了解如何编写爬虫对于数据分析、网站监控以及信息收集等任务非常有帮助。 接下来,我们来看PHP留言版...

    PHP实例开发源码—葵堆动漫php爬虫程序 php版.zip

    3. **正则表达式**:用于匹配和提取网页中的特定字符串或模式。 4. **Session和Cookie管理**:模仿浏览器的行为,处理登录状态和保持会话。 在这个葵堆动漫PHP爬虫程序中,开发者可能使用了上述技术来抓取动漫相关...

    利用PHP制作简单的内容采集器的代码

    3. **preg_match_all()函数**: 这是一个PHP内置函数,用于执行一个正则表达式的匹配查找,并返回所有匹配结果。 #### 三、具体实现步骤 ##### 1. 准备工作 首先,我们需要明确采集的目标——以《回到明朝当王爷》为...

    PHP实例开发源码—PHP版网站状态监控.zip

    这可以通过file()或file_get_contents()函数读取文件内容,然后使用正则表达式解析出关键信息。 3. 数据存储:收集到的数据需要存储以便后续分析和展示。这通常涉及数据库操作,如MySQL,使用PHP的PDO(PHP Data ...

    基于PHP的Mars_Qvod资源采集抓取程序php版源码.zip

    在Mars_Qvod程序中,可能采用了正则表达式、DOM解析等技术来解析和提取快播资源链接。 四、PHP实现原理 1. HTTP请求:程序首先会发送HTTP请求到目标网站,获取页面内容。 2. 数据解析:获取到页面后,PHP会解析HTML...

    PHP实例开发源码—OKList php网址聚合程序.zip

    2. **HTTP协议和网页抓取**:可能涉及到HTTP请求的发送,以及HTML解析,如DOM操作或正则表达式提取信息。 3. **数据库操作**:可能使用了MySQL或其他数据库管理系统,学习如何进行数据存储和查询。 4. **MVC(Model-...

    PHP经典实例--表单

    例如,我们可以使用`filter_var`函数检查邮箱格式,或者使用正则表达式检查密码强度: ```php $email = $_POST['email']; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "无效的电子邮件地址"; } $...

    PHP实例开发源码—育儿 php问答爬虫.zip

    3. **HTML解析**:可能涉及到DOM(Document Object Model)解析或者正则表达式,来提取网页中的问答信息。 4. **数据存储**:如何将抓取的数据存储到数据库中,例如MySQL或者NoSQL数据库如MongoDB。 5. **错误处理...

Global site tag (gtag.js) - Google Analytics