/////////////////////////////////////////////////////
      /           BIWEB WMS v5.8商务智能建站系统          /
      /                                                   /
      /                   BIWEB开发团队倾情奉献           /
      /                   官网:www.biweb.cn              /
      /////////////////////////////////////////////////////

  您将要安装的是BIWEB WMS v5.8商务智能建站系统,安装前请仔细阅读说明文档!  

**  系统介绍
________________________________________________________________________

  BIWEB WMS v5.8采用PHP5+PDO_mysql+MYSQL+SMARTY程序架构,在WINDOWS、LINUX、UNIX下均表现优异,BIWEB的链接系统使得整个网站更像纯静态网页网站,
  并使全站链接最大只有3层,对搜索引擎非常友好,利于搜索引擎全站收录。BIWEB设计包含了大量的SEO优化模块,用户可针对整个网站每个页面做出不同的
  优化调整,可以针对每个页面设置不同的标题,关键字和说明。 BIWEB系统提供自动生成google sitemaps功能,可以直接提交到google去,以便google对网
  站进行全站收录
  BIWEB开发团队一直走在技术前列,目前BIWEB WMS v5.8完美支持PHP5.3。

  BIWEB WMS v5.8 (2009.7.25) 更新功能如下:
1.修正了程序中测试出来的notice注意错误;
2.修正了数据库备份导入导出的bug,现完成大数据量数据库的正常的导入导出;
3.在FireFox下修正了所有javascript的BUG;
4.eWebEditor在FireFox下无法调用,新增了在FireFox下自动调用fckeditor;
5.增强了smarty的html_checkboxes的用法,可以直接外挂javascript;
6.新增filtrate.inc.php过滤数据文件;
7.新增页面数据提交之后回调功能;
8.整理了所有栏目多余的session_start();
9.新增提交数据指定特殊字符过滤功能;
10.安装时自动建立数据库功能;
11.新增安装时使用栏目名称做为栏目title显示;
12.修正了后台管理页面针对FireFox的CSS样式;
13.修改了会员权限管理方式,用直接选择方式替换了手写方式;
14.修正了时间组件取得0000-00-00样式时间的显示错误;
15.修改了栏目发布特大信息,数据类型text容量不够,自动截取信息的错误;
16.对于数据表结构的调整,将summary摘要等字段放出,可以在列表页面做简单查询;
17.修正了邮政编码检查函数的bug;
18.修改了警告弹出的处理,不仅可以后退,还可以指定跳转链接;
19.新增后台发布和修改数据时,自动按标题分词生成tag标签;
20.新增了35万中文分词库,涉及到常规用词、医药、明星、动漫、地理、金融证券、仪器仪表、电气、军事、银行、菜名、旅游等;
21.修正后台提交表单检查的错误;
22.新增标题修饰的功能,可以加粗,标红等;
23.修改了分类系统,数据库分类新增可以查询所有大类下的数据信息;
24.摘要的生成长度可在配置文件中调整;
25.新做了系统安装的检查;
26.新做了栏目安装的检查;
27.安装栏目时同时将栏目SEO设定好了,可在后台修改相关栏目的SEO信息;
28.新增来栏目点击数随机生成功能;
29.新增取得自增ID函数,确保每次上传的文件都能跟ID对应;
30.修正建立缓存自动建立目录的错误;
31.新增邮件营销功能,包括搜索引擎邮件提取,会员邮件提却;
32.修正了RSS和WAP中的bug;

________________________________________________________________________


**  安装说明

________________________________________________________________________

  1.将biweb压缩包里的文件上传到Web空间上.

  2.请运行 /install/index.php 来进行系统安装设置.

  3.进入 /admin/  目录,登陆管理后台.

  4.点击 菜单栏中 [构建后台] (红色文字) 进入网站构建后台.

  5.添加频道和栏目。


  欢迎访问 http://www.biweb.cn/ 来获得最新程序或模版。

_________________________________________________________________________

**  官方技术支持以及商业授权
   
   如果您在安装、使用中出现问题,请到官方论坛进行咨询、交流,以需求帮助:
   http://www.biweb.cn/bbs

   如果您需要我们的技术人员提供及时的官方支持,或者您需要商业授权,请参考:
   http://www.biweb.cn/html/archives/license.html


**  联系我们:
   上海网务网络信息有限公司——全心全意帮您赚钱的好伙伴
   TEL:021-54011321
   URL:www.biweb.cn    www.bizeway.com
   QQ群:38447164

**  加入我们:
 
   如果你想加入BIWEB开发组请登录:
   http://www.biweb.cn

BIWEB WMS V5.8点击下载
Tags: , , , ,

常见正则表达式

2009/07/15 23:57 ArthurXF
------------------------------------------------------------------------
                       IP地址(IPv4)/IPv6地址的正则表达式
------------------------------------------------------------------------

IPv4地址
正则表达式:^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
测试环境:Javascript/.Net/C++/JAVA
特点:匹配IPv4地址

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$
测试环境:Javascript/.Net/C++/JAVA
特点:支持IPv6的基本格式

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$
测试环境:Javascript/.Net/C++/JAVA
特点:支持压缩

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
测试环境:Javascript/.Net/C++/JAVA
特点:只支持IPv6/IPv4混合地址。前面IPv6部分支持压缩

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$
测试环境:Javascript/.Net/C++/JAVA
特点:支持所有格式的IPv6地址



分析:
       IPv4:通常用点分十进制表示IP地址。IP地址长4个字节共32位,点分十进制将其分为4部分,中间用“.”号分开,所以每部分共8位,二进制为“00000000”到“11111111”,十进制为“0”到“255”。
       IPv6:由128位(8*16),分8段,每段16位,段与段之间用“:”分开,用十六进制表示,格式FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF,IPv6地址可以压缩。

IPv4匹配:
0.0.0.0
255.255.255.255
192.168.1.1
0.0.0.1
01.1.1.1
5.025.25.25

IPv4不匹配:
111.111.111.256

IPv6匹配:
5e:0:0:0:0:0:5668:eeee
5e:0:0:023:0:0:5668:eeee
5e::5668:eeee
::1:8:8888:0:0:8
1::
::1:2:2:2
::

IPv6不匹配:
5e::5668::eeee
55555:5e:0:0:0:0:0:5668:eeee

IPv6/IPv4混合地址匹配:
11:11:e:1EEE:11:11:200.200.200.200
e:ee:5:e::0.0.0.254
::EfE:120.0.0.1
::120.0.0.1
ee:ee::11.11.11.125

------------------------------------------------------------------------
                       小数的正则表达式
------------------------------------------------------------------------

小数
正则表达式:^([-+]?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$
测试环境:.NET/Javascript

分析:
       不考滤科学计数法。

匹配:
0.012
0.000000005
-0.000000005
1.00001
-1.000000010
24.215
+2.25
1.0
       
不匹配:
0.0
0000.02
001.001
1.1.1

------------------------------------------------------------------------
                       E-mail地址的正则表达式
------------------------------------------------------------------------

E-mail地址
正则表达式:^[a-zA-Z0-9]((?测试环境:.NET/C++
特点:域名部分可以为IP地址,不考滤域名部分为主机名的情况,域名部分不能保证总长度在256字符以内。

分析:
       E-mail地址分三部分:
       第一部分:用户帐号。
       第二部分:“@”符号(英文单词“at”的符号化)。
       第三部分:域名或者IP地址。
       您的邮箱名应该由a-Z、A-Z、0-9开头,邮箱名可由英文字母、0~9的数字、点、减号或下划线组成;邮箱名长度为3~18个字符;邮箱名不能以点、减号或下划线结尾,不能出现连续两个或两个以上的点、减号。

匹配:
321635@qq.com
3565352@10.0.0.1
dslfklds3546_.-dl@dlsk.com
lsdkf__dlskflk@ds.com

不匹配:
adfd@hostname
sdfsdlk..ldsfil@ds.com
aa@d.com
-dfddsf@ad.com

------------------------------------------------------------------------
                       手机号码的正则表达式
------------------------------------------------------------------------
手机
正则表达式:^((\+86)?|\(\+86\))0?1[358]\d{9}$
测试环境:.Net

分析:
       手机号码长度11位,以 1 开头,第二位是 3、5 或者 8 (好像有了189开头的号码了)。

匹配:
13111111111
015111111111
+8613111111111
+8615111111111
+86015111111111
(+86)13111111111
不匹配:
11111111111
131111111
151111111111

------------------------------------------------------------------------
                       域名的正则表达式
------------------------------------------------------------------------
正则表达式:^([0-9a-zA-Z][0-9a-zA-Z-]{0,62}\.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62})\.?$
测试环境:.NET/Javascript/C++
特点:无法保证全长在256字符以内。

分析:
       一个完整的域名,由根域、顶级域、二级、三级……域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,单个域长度不超过63,完整的域名全长不超过256个字符。在DNS系统中,全名是以一个点“.”来结束的,例如“www.nit.edu.cn.”。没有最后的那个点则表示一个相对地址。

匹配:
www.baidu.com
sd-.2222222.22222222222.222222222222222.22222222.222222222.dfsd.cslkd

不匹配:
sdlkk.ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.cn

------------------------------------------------------------------------
                       固定电话的正则表达式
------------------------------------------------------------------------
区号:^0?([1-9]\d|[3-9][13579]\d|[3-9][24680]\d{2})$

国家代码:+86
正则表达式:\+86

区号-市话号码                        如:10-11111111,010-11111111
正则表达式:^0?([1-9]\d-\d{6,8}|[3-9][13579]\d-\d{6,7}|[3-9][24680]\d{2}-\d{6})$

区号-市话号码-分机                          如:10-11111111-111,010-11111111-111
正则表达式:^0?([1-9]\d-\d{6,8}|[3-9][13579]\d-\d{6,7}|[3-9][24680]\d{2}-\d{6})(-\d{3})$

区号<这里是相连的>市话                如:1011111111,01011111111
正则表达式:^0?([1-9]\d\d{6,8}|[3-9][13579]\d\d{6,7}|[3-9][24680]\d{2}\d{6})$

所有格式:^((\+86)?|\(\+86\)|\+86\s)0?([1-9]\d-?\d{6,8}|[3-9][13579]\d-?\d{6,7}|[3-9][24680]\d{2}-?\d{6})(-\d{3})?$

分析:
       手机号码:11位,以 1 开头,第二位是 3 或者 5。没考滤服务器的号码。
       固定电话:总长10位,区号=10-4位,市话长度=10-N,可能还有3位分机号。开头的“0”不是区号部分,而是供长途直拔电话业务使用的字头。
       手机: 国家代码+手机号
       电话:国家代码+区号+电话号码

  原邮电部对此有如下规定:(1)北京、天津等区号两位的城市市话号码长度不大于8位,因为市 话号码首位不能为1、0,最终容量可达八千万部。(2)各省会城市和大城市的区号三位,第一位选取“3、4、5、6、7、8、9”共七个数字,第二位选取单数“1、3、5、7、9”共五个数字,第三位随意。(3)各县城及小城市的区号四位,第一位选取“3、4、5、6、7、8、9”共七个数字,第二位选取双数“2、4、6、8、0”共五个数字,第三、四位随意。

匹配:
1334567890
031-3145678-123
010-11111111
(+86)010-13901691-123

不匹配:
+861678901
(+89)07912140337

------------------------------------------------------------------------
                               日期的正则表达式
------------------------------------------------------------------------

分析:
       中国式日期为“年-月-日”
       年:1到任意在于1的整数,不能“0”开头。
       月:1到12。
       日:1、3、5、7、8、10、12月有31天;4、6、9、11月有30天,闰年2月份有29天,否则28天。
       闰年的条件是符合下面二者之一:
               (1)能被4整除,但不能被100整除。
               (2)能被4整除,又能被400整除。//缩写为能被400整除。
       #00格式(#代表任何数),只要#能被4整除,#00就一定能被400整除(闰年)。
       非#00格式(也就不能被100整除了),能被4整除。
第一年的2月份都有28天,只要是闰年还要加一天。现在的任务是找出闰年。
100以内能被4整除的有:
00 04 08 12 16
20 24 28 32 36
40 44 48 52 56
60 64 68 72 76
80 84 88 92 96
他们的表达式为:(0?[048]|[2468][048]|[13579][26])

#00一定会被4整除,所以,只要#能被4整除,#00就一定能被400整除,他就是闰年。
#00格式闰年:(\d*(0?[048]|[2468][048]|[13579][26])00)
因为不能为#00格式,所以要从上面的表中删除00这个结果。
非#00格式闰年:(\d*(0?[48]|[2468][048]|[13579][26]))
把上面两个正则表达式合并
闰年:(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))

整数01-28:(2[0-8]|[01]\d)
整数01-30:(30|[012]\d)
整数01-31:(3[01]|[012]\d)

整数1-28:(2[0-8]|1\d|[1-9])
整数1-30:(30|[12]\d|[1-9])
整数1-31:(3[01]|[12]\d|[1-9])
把上面两组格式合并在一起:
整数1-28:(2[0-8]|1\d|0?[1-9])
整数1-30:(30|[12]\d|0?[1-9])
整数1-31:(3[01]|[12]\d|0?[1-9])

现在我们把它们全部组合成中国“年-月-日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$

匹配:
1-1-1
244-02-29
10-10-10
2000-2-29
2008-2-29
不匹配:
2009-2-29
2009-13-10
1005-12-65

中国“年/月/日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$
匹配:
1/1/1
244/02/29
10/10/10
2000/2/29
2008/2/23
不匹配:
2009/2/29
2009/13/10
1005/12/65


中国“年.月.日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$
匹配:
1.1.1
244.02.29
10.10.10
2000.2.29
2008.2.23
不匹配:
2009.2.29
2009.13.10
1005/12/65

中国“年/月/日”、“年-月-日”、“年.月.日”格式
(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$)
匹配:
1/1/1
244/02/29
10/10/10
2000/2/29
2008/2/29
244-02-29
10-10-10
2000-2-28
2008.2.29
不匹配:
1-1/1
2009/2/29
2009/13/10
1005/12/65
2009-2-29
2009-13-10
1005-12-65

中国“年月日”格式(用于身份证编码等),年由4位数表示,月2位,日2位
^(((0[048]|[2468][048]|[13579][26])00|\d\d(0[48]|[2468][048]|[13579][26]))0229)$|^\d{4}((0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|02(2[0-8]|1\d|0[1-9]))$
匹配:
19880329
20001220
20080229
不匹配:
1988329
20090229
20091310
10051265

欧美“月/日/年”格式
^(0?2\/29\/(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26])))$|^((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))\/[1-9]\d*$
匹配:
1/1/1
02/29/244
10/10/10
02/29/2000
2/29/2008
不匹配:
2/29/2009
13/10/2009
12/65/1005

------------------------------------------------------------------------
                               时间的正则表达式
------------------------------------------------------------------------

时间
正则表达式:
^([01]?\d|2[123]):([0-4]?\d|5\d)(:([0-4]?\d|5\d)(\.\d+|-?0\.\d*[1-9]\d*)? )?(am|AM|pm|PM)?$
缺点:

分析:
       时间格式:HH:mm:ss [am|pm|AM|PM]
                              HH:mm [am|pm|AM|PM]
       HH在0-23之间,mm在0-59之间,ss是大于等于0小于60的小数或整数。
匹配:
1:1:1 am
23:59:59.999
21:58
不匹配:
24:20:20



------------------------------------------------------------------------
                               身份证号码的正则表达式
------------------------------------------------------------------------
国内的身份证号码
正则表达式:(^\d{6}((0[48]|[2468][048]|[13579][26])0229|\d\d(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}$)|(^\d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)\d\d)|2100)(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}[\dX]$)

一代身份证号码:^\d{6}((0[48]|[2468][048]|[13579][26])0229|\d\d(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}$
二代身份证号码:^\d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)\d\d)|2100)(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}[\dX]$

测试环境:C++/.NET/JAVA/Javascript
属性:多行模式,大小写敏感
特点:不能验证二代身份证校验码位的正确性。

分析:

一代15位身份证号码:六位数字地址码,第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期,第15位代表性别,奇数为男,偶数为女。
二代18位身份证号码:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
       生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。
       顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。
       校验码(身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

1984年8月30日我国颁发了第一批身份证(一代身份证),可由此
假设1.持有身份证的人中最老的在1900年出生。
假设2.一代身份证持有人在1900-2010年间出生。
假设3.二代身份证持有人在1900-2100年间出生。

1900-2100年间
闰年:(2000|(19|21)(0[48]|[2468][048]|[13579][26]))
平年:(19|21)(0?[1235679]|[2468][1235679]|[13579][01345789])

匹配:
34052419800229001X
340524800229001
340524199001010013
不匹配:
34052419800101001a
21552418801010011
340524850229001
34052422800110081X
34052419800229001x

常见正则表达式

2009/07/15 23:57 ArthurXF
------------------------------------------------------------------------
                       IP地址(IPv4)/IPv6地址的正则表达式
------------------------------------------------------------------------

IPv4地址
正则表达式:^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
测试环境:Javascript/.Net/C++/JAVA
特点:匹配IPv4地址

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$
测试环境:Javascript/.Net/C++/JAVA
特点:支持IPv6的基本格式

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$
测试环境:Javascript/.Net/C++/JAVA
特点:支持压缩

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
测试环境:Javascript/.Net/C++/JAVA
特点:只支持IPv6/IPv4混合地址。前面IPv6部分支持压缩

IPv6地址
正则表达式:^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$
测试环境:Javascript/.Net/C++/JAVA
特点:支持所有格式的IPv6地址



分析:
       IPv4:通常用点分十进制表示IP地址。IP地址长4个字节共32位,点分十进制将其分为4部分,中间用“.”号分开,所以每部分共8位,二进制为“00000000”到“11111111”,十进制为“0”到“255”。
       IPv6:由128位(8*16),分8段,每段16位,段与段之间用“:”分开,用十六进制表示,格式FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF,IPv6地址可以压缩。

IPv4匹配:
0.0.0.0
255.255.255.255
192.168.1.1
0.0.0.1
01.1.1.1
5.025.25.25

IPv4不匹配:
111.111.111.256

IPv6匹配:
5e:0:0:0:0:0:5668:eeee
5e:0:0:023:0:0:5668:eeee
5e::5668:eeee
::1:8:8888:0:0:8
1::
::1:2:2:2
::

IPv6不匹配:
5e::5668::eeee
55555:5e:0:0:0:0:0:5668:eeee

IPv6/IPv4混合地址匹配:
11:11:e:1EEE:11:11:200.200.200.200
e:ee:5:e::0.0.0.254
::EfE:120.0.0.1
::120.0.0.1
ee:ee::11.11.11.125

------------------------------------------------------------------------
                       小数的正则表达式
------------------------------------------------------------------------

小数
正则表达式:^([-+]?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$
测试环境:.NET/Javascript

分析:
       不考滤科学计数法。

匹配:
0.012
0.000000005
-0.000000005
1.00001
-1.000000010
24.215
+2.25
1.0
       
不匹配:
0.0
0000.02
001.001
1.1.1

------------------------------------------------------------------------
                       E-mail地址的正则表达式
------------------------------------------------------------------------

E-mail地址
正则表达式:^[a-zA-Z0-9]((?测试环境:.NET/C++
特点:域名部分可以为IP地址,不考滤域名部分为主机名的情况,域名部分不能保证总长度在256字符以内。

分析:
       E-mail地址分三部分:
       第一部分:用户帐号。
       第二部分:“@”符号(英文单词“at”的符号化)。
       第三部分:域名或者IP地址。
       您的邮箱名应该由a-Z、A-Z、0-9开头,邮箱名可由英文字母、0~9的数字、点、减号或下划线组成;邮箱名长度为3~18个字符;邮箱名不能以点、减号或下划线结尾,不能出现连续两个或两个以上的点、减号。

匹配:
321635@qq.com
3565352@10.0.0.1
dslfklds3546_.-dl@dlsk.com
lsdkf__dlskflk@ds.com

不匹配:
adfd@hostname
sdfsdlk..ldsfil@ds.com
aa@d.com
-dfddsf@ad.com

------------------------------------------------------------------------
                       手机号码的正则表达式
------------------------------------------------------------------------
手机
正则表达式:^((\+86)?|\(\+86\))0?1[358]\d{9}$
测试环境:.Net

分析:
       手机号码长度11位,以 1 开头,第二位是 3、5 或者 8 (好像有了189开头的号码了)。

匹配:
13111111111
015111111111
+8613111111111
+8615111111111
+86015111111111
(+86)13111111111
不匹配:
11111111111
131111111
151111111111

------------------------------------------------------------------------
                       域名的正则表达式
------------------------------------------------------------------------
正则表达式:^([0-9a-zA-Z][0-9a-zA-Z-]{0,62}\.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62})\.?$
测试环境:.NET/Javascript/C++
特点:无法保证全长在256字符以内。

分析:
       一个完整的域名,由根域、顶级域、二级、三级……域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,单个域长度不超过63,完整的域名全长不超过256个字符。在DNS系统中,全名是以一个点“.”来结束的,例如“www.nit.edu.cn.”。没有最后的那个点则表示一个相对地址。

匹配:
www.baidu.com
sd-.2222222.22222222222.222222222222222.22222222.222222222.dfsd.cslkd

不匹配:
sdlkk.ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.cn

------------------------------------------------------------------------
                       固定电话的正则表达式
------------------------------------------------------------------------
区号:^0?([1-9]\d|[3-9][13579]\d|[3-9][24680]\d{2})$

国家代码:+86
正则表达式:\+86

区号-市话号码                        如:10-11111111,010-11111111
正则表达式:^0?([1-9]\d-\d{6,8}|[3-9][13579]\d-\d{6,7}|[3-9][24680]\d{2}-\d{6})$

区号-市话号码-分机                          如:10-11111111-111,010-11111111-111
正则表达式:^0?([1-9]\d-\d{6,8}|[3-9][13579]\d-\d{6,7}|[3-9][24680]\d{2}-\d{6})(-\d{3})$

区号<这里是相连的>市话                如:1011111111,01011111111
正则表达式:^0?([1-9]\d\d{6,8}|[3-9][13579]\d\d{6,7}|[3-9][24680]\d{2}\d{6})$

所有格式:^((\+86)?|\(\+86\)|\+86\s)0?([1-9]\d-?\d{6,8}|[3-9][13579]\d-?\d{6,7}|[3-9][24680]\d{2}-?\d{6})(-\d{3})?$

分析:
       手机号码:11位,以 1 开头,第二位是 3 或者 5。没考滤服务器的号码。
       固定电话:总长10位,区号=10-4位,市话长度=10-N,可能还有3位分机号。开头的“0”不是区号部分,而是供长途直拔电话业务使用的字头。
       手机: 国家代码+手机号
       电话:国家代码+区号+电话号码

  原邮电部对此有如下规定:(1)北京、天津等区号两位的城市市话号码长度不大于8位,因为市 话号码首位不能为1、0,最终容量可达八千万部。(2)各省会城市和大城市的区号三位,第一位选取“3、4、5、6、7、8、9”共七个数字,第二位选取单数“1、3、5、7、9”共五个数字,第三位随意。(3)各县城及小城市的区号四位,第一位选取“3、4、5、6、7、8、9”共七个数字,第二位选取双数“2、4、6、8、0”共五个数字,第三、四位随意。

匹配:
1334567890
031-3145678-123
010-11111111
(+86)010-13901691-123

不匹配:
+861678901
(+89)07912140337

------------------------------------------------------------------------
                               日期的正则表达式
------------------------------------------------------------------------

分析:
       中国式日期为“年-月-日”
       年:1到任意在于1的整数,不能“0”开头。
       月:1到12。
       日:1、3、5、7、8、10、12月有31天;4、6、9、11月有30天,闰年2月份有29天,否则28天。
       闰年的条件是符合下面二者之一:
               (1)能被4整除,但不能被100整除。
               (2)能被4整除,又能被400整除。//缩写为能被400整除。
       #00格式(#代表任何数),只要#能被4整除,#00就一定能被400整除(闰年)。
       非#00格式(也就不能被100整除了),能被4整除。
第一年的2月份都有28天,只要是闰年还要加一天。现在的任务是找出闰年。
100以内能被4整除的有:
00 04 08 12 16
20 24 28 32 36
40 44 48 52 56
60 64 68 72 76
80 84 88 92 96
他们的表达式为:(0?[048]|[2468][048]|[13579][26])

#00一定会被4整除,所以,只要#能被4整除,#00就一定能被400整除,他就是闰年。
#00格式闰年:(\d*(0?[048]|[2468][048]|[13579][26])00)
因为不能为#00格式,所以要从上面的表中删除00这个结果。
非#00格式闰年:(\d*(0?[48]|[2468][048]|[13579][26]))
把上面两个正则表达式合并
闰年:(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))

整数01-28:(2[0-8]|[01]\d)
整数01-30:(30|[012]\d)
整数01-31:(3[01]|[012]\d)

整数1-28:(2[0-8]|1\d|[1-9])
整数1-30:(30|[12]\d|[1-9])
整数1-31:(3[01]|[12]\d|[1-9])
把上面两组格式合并在一起:
整数1-28:(2[0-8]|1\d|0?[1-9])
整数1-30:(30|[12]\d|0?[1-9])
整数1-31:(3[01]|[12]\d|0?[1-9])

现在我们把它们全部组合成中国“年-月-日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$

匹配:
1-1-1
244-02-29
10-10-10
2000-2-29
2008-2-29
不匹配:
2009-2-29
2009-13-10
1005-12-65

中国“年/月/日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$
匹配:
1/1/1
244/02/29
10/10/10
2000/2/29
2008/2/23
不匹配:
2009/2/29
2009/13/10
1005/12/65


中国“年.月.日”格式
^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$
匹配:
1.1.1
244.02.29
10.10.10
2000.2.29
2008.2.23
不匹配:
2009.2.29
2009.13.10
1005/12/65

中国“年/月/日”、“年-月-日”、“年.月.日”格式
(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))-0?2-29)$|^[1-9]\d*-((0?[13578]|10|12)-(3[01]|[12]\d|0?[1-9])|(0?[469]|11)-(30|[12]\d|0?[1-9])|(0?2)-(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\/0?2\/29)$|^[1-9]\d*\/((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))$)|(^((\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26]))\.0?2\.29)$|^[1-9]\d*\.((0?[13578]|10|12)\.(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\.(30|[12]\d|0?[1-9])|(0?2)\.(2[0-8]|1\d|0?[1-9]))$)
匹配:
1/1/1
244/02/29
10/10/10
2000/2/29
2008/2/29
244-02-29
10-10-10
2000-2-28
2008.2.29
不匹配:
1-1/1
2009/2/29
2009/13/10
1005/12/65
2009-2-29
2009-13-10
1005-12-65

中国“年月日”格式(用于身份证编码等),年由4位数表示,月2位,日2位
^(((0[048]|[2468][048]|[13579][26])00|\d\d(0[48]|[2468][048]|[13579][26]))0229)$|^\d{4}((0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|02(2[0-8]|1\d|0[1-9]))$
匹配:
19880329
20001220
20080229
不匹配:
1988329
20090229
20091310
10051265

欧美“月/日/年”格式
^(0?2\/29\/(\d*(0?[048]|[2468][048]|[13579][26])00|\d*(0?[48]|[2468][048]|[13579][26])))$|^((0?[13578]|10|12)\/(3[01]|[12]\d|0?[1-9])|(0?[469]|11)\/(30|[12]\d|0?[1-9])|(0?2)\/(2[0-8]|1\d|0?[1-9]))\/[1-9]\d*$
匹配:
1/1/1
02/29/244
10/10/10
02/29/2000
2/29/2008
不匹配:
2/29/2009
13/10/2009
12/65/1005

------------------------------------------------------------------------
                               时间的正则表达式
------------------------------------------------------------------------

时间
正则表达式:
^([01]?\d|2[123]):([0-4]?\d|5\d)(:([0-4]?\d|5\d)(\.\d+|-?0\.\d*[1-9]\d*)? )?(am|AM|pm|PM)?$
缺点:

分析:
       时间格式:HH:mm:ss [am|pm|AM|PM]
                              HH:mm [am|pm|AM|PM]
       HH在0-23之间,mm在0-59之间,ss是大于等于0小于60的小数或整数。
匹配:
1:1:1 am
23:59:59.999
21:58
不匹配:
24:20:20



------------------------------------------------------------------------
                               身份证号码的正则表达式
------------------------------------------------------------------------
国内的身份证号码
正则表达式:(^\d{6}((0[48]|[2468][048]|[13579][26])0229|\d\d(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}$)|(^\d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)\d\d)|2100)(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}[\dX]$)

一代身份证号码:^\d{6}((0[48]|[2468][048]|[13579][26])0229|\d\d(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}$
二代身份证号码:^\d{6}((2000|(19|21)(0[48]|[2468][048]|[13579][26]))0229|(((20|19)\d\d)|2100)(0[13578]|10|12)(3[01]|[12]\d|0[1-9])|(0[469]|11)(30|[12]\d|0[1-9])|(02)(2[0-8]|1\d|0[1-9]))\d{3}[\dX]$

测试环境:C++/.NET/JAVA/Javascript
属性:多行模式,大小写敏感
特点:不能验证二代身份证校验码位的正确性。

分析:

一代15位身份证号码:六位数字地址码,第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期,第15位代表性别,奇数为男,偶数为女。
二代18位身份证号码:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
       生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。
       顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。
       校验码(身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

1984年8月30日我国颁发了第一批身份证(一代身份证),可由此
假设1.持有身份证的人中最老的在1900年出生。
假设2.一代身份证持有人在1900-2010年间出生。
假设3.二代身份证持有人在1900-2100年间出生。

1900-2100年间
闰年:(2000|(19|21)(0[48]|[2468][048]|[13579][26]))
平年:(19|21)(0?[1235679]|[2468][1235679]|[13579][01345789])

匹配:
34052419800229001X
340524800229001
340524199001010013
不匹配:
34052419800101001a
21552418801010011
340524850229001
34052422800110081X
34052419800229001x
  本文由ArthurXF原创,ArthurXF原创具有最强营销功能的BIWEB WMS网站管理系统,将让您的业务如虎添翼。
  PHP现在推出5.3.0版本了,不过下载的时候有几个不同版本选择。那就是VC6 X86和VC9 X86。
首先我来解答:
VC6是什么?
VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。
VC9是什么?
VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。

那我们如何选择下载哪个版本的PHP呢?
如果你是在windows下使用Apache+PHP的,请选择VC6版本;
如果你是在windows下使用IIS+PHP的,请选择VC9版本;

那Non Thread Safe是什么?
Non Thread Safe就是非线程安全;
Thread Safe 是什么?
Non Thread Safe 是线程安全;
http://www.biweb.cn
官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。

Tags: , ,
  本文由ArthurXF原创,ArthurXF原创具有最强营销功能的BIWEB WMS网站管理系统,将让您的业务如虎添翼。
  PHP现在推出5.3.0版本了,不过下载的时候有几个不同版本选择。那就是VC6 X86和VC9 X86。
首先我来解答:
VC6是什么?
VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。
VC9是什么?
VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。

那我们如何选择下载哪个版本的PHP呢?
如果你是在windows下使用Apache+PHP的,请选择VC6版本;
如果你是在windows下使用IIS+PHP的,请选择VC9版本;

那Non Thread Safe是什么?
Non Thread Safe就是非线程安全;
Thread Safe 是什么?
Non Thread Safe 是线程安全;
http://www.biweb.cn
官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。

Tags: , ,
分页: 10/29 第一页 上页 5 6 7 8 9 10 11 12 13 14 下页 最后页 [ 显示模式: 摘要 | 列表 ]