常用的正则表达式(php asp javascript)学习手册
一些常用的正则表达式
“^d+$” //非负整数(正整数 + 0)
“^[0-9]*[1-9][0-9]*$” //正整数
“^((-d+)|(0+))$” //非正整数(负整数 + 0)
“^-[0-9]*[1-9][0-9]*$” //负整数
“^-?d+$” //整数
“^d+(.d+)?$” //非负浮点数(正浮点数 + 0)
“^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$” //正浮点数
“^((-d+(.d+)?)|(0+(.0+)?))$” //非正浮点数(负浮点数 + 0)
“^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$” //负浮点数
“^(-?d+)(.d+)?$” //浮点数
“^[A-Za-z]+$” //由26个英文字母组成的字符串
“^[A-Z]+$” //由26个英文字母的大写组成的字符串
“^[a-z]+$” //由26个英文字母的小写组成的字符串
“^[A-Za-z0-9]+$” //由数字和26个英文字母组成的字符串
“^w+$” //由数字、26个英文字母或者下划线组成的字符串
“^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$” //email地址
“^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$” //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
“^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$” //Emil
“(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?” //电话号码
“^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$” //IP地址
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:(d{3}-|d{4}-)?(d{8}|d{7})?
匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$
javascript中应用
计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
代码如下 | 复制代码 |
String.prototype.len=function(){return this.replace([^x00-xff]/g,”aa”).length;} |
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/
匹配首尾空格的正则表达式:(^s*)|(s*$)
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
代码如下 | 复制代码 |
String.prototype.trim = function() |
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
代码如下 | 复制代码 |
function IP2V(ip) |
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
代码如下 | 复制代码 |
var ip=”10.100.20.168″ |
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]
代码如下 | 复制代码 |
var s=”abacabefgeeii” |
我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。
得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
代码如下 | 复制代码 |
s=”http://www.111cn.net/nokia/5230/” |
php中正则函数和用法
preg_match()和preg_match_all()
preg_quote()
preg_split()
preg_grep()
preg_replace()
函数的具体使用,我们可以通过PHP手册来找到,下面分享一些平时积累的正则表达式:
匹配action属性
以下为引用的内容:
代码如下 | 复制代码 |
$str = ''; $match = ''; preg_match_all('/s+action="(?!http:)(.*?)"s/', $str, $match); print_r($match); |
在正则中使用回调函数
代码如下 | 复制代码 |
/**
|
一些正则基本语法
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
B 匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
cx 匹配由 x 指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
d 匹配一个数字字符。等价于 [0-9]。
D 匹配一个非数字字符。等价于 [^0-9]。
f 匹配一个换页符。等价于 x0c 和 cL。
n 匹配一个换行符。等价于 x0a 和 cJ。
r 匹配一个回车符。等价于 x0d 和 cM。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
S 匹配任何非空白字符。等价于 [^ fnrtv]。
t 匹配一个制表符。等价于 x09 和 cI。
v 匹配一个垂直制表符。等价于 x0b 和 cK。
w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
参考效果图
介绍
正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net,php等等,我今天就把我对正则表达式的理解跟大家唠唠,不当之处,请多多指教!
需要知道的术语——下面的术语你知道多少?
Δ 定界符
Δ 字符域
Δ 修饰符
Δ 限定符
Δ 脱字符
Δ 通配符(正向预查,反向预查)
Δ 反向引用
Δ 惰性匹配
Δ 注释
Δ 零字符宽
定位
我们什么时候使用正则表达式呢?不是所有的字符操作都用正则就好了,php在某些方面用正则反而影响效率。当我们遇到复杂文本数据的解析时候,用正则是比较好的选择。
优点
正则表达式在处理复杂字符操作的时候,可以提高工作效率,也在一定程度节省你的代码量。
缺点
我们在使用正则表达式的时候,复杂的正则表达式会加大代码的复杂度,让人很难理解。所以我们有的时候需要在正则表达式内部添加注释。
通用模式
¤ 定界符,通常使用 "/"做为定界符开始和结束,也可以使用"#"。
什么时候使用"#"呢?一般是在你的字符串中有很多"/"字符的时候,因为正则的时候这种字符需要转义,比如uri。
使用"/"定界符的代码如下.
代码如下 | 复制代码 |
$regex = '/^http://([w.]+)/([w]+)/([w]+).html$/i'; if(preg_match($regex, $str, $matches)){ echo "n"; |
preg_match中的$matches[0]将包含与整个模式匹配的字符串。
使用"#"定界符的代码如下.这个时候对"/"就不转义!
代码如下 | 复制代码 |
$regex = '#^http://([w.]+)/([w]+)/([w]+).html$#i'; if(preg_match($regex, $str, $matches)){ echo "n"; |
¤ 修饰符:用于改变正则表达式的行为。
我们看到的('/^http://([w.]+)/([w]+)/([w]+).html/i')中的最后一个"i"就是修饰符,表示忽略大小写,还有一个我们经常用到的是"x"表示忽略空格。
贡献代码:
代码如下 | 复制代码 |
$regex = '/HELLO/'; if(preg_match($regex, $str, $matches)){ if(preg_match($regex.'i', $str, $matches)){
|
¤ 字符域:[w]用方括号扩起来的部分就是字符域。
¤ 限定符:如[w]{3,5}或者[w]*或者[w]+这些[w]后面的符号都表示限定符。现介绍具体意义。
{3,5}表示3到5个字符。{3,}超过3个字符,{,5}最多5个,{3}三个字符。
* 表示0到多个
+ 表示1到多个。
¤ 脱字符号
^:
> 放在字符域(如:[^w])中表示否定(不包括的意思)——“反向选择”
> 放在表达式之前,表示以当前这个字符开始。(/^n/i,表示以n开头)。
注意,我们经常管""叫"跳脱字符"。用于转义一些特殊符号,如".","/"
通配符(lookarounds):断言某些字符串中某些字符的存在与否!
lookarounds分两种:lookaheads(正向预查 ?=)和lookbehinds(反向预查?<=)。
> 格式:
正向预查:(?=) 相对应的 (?!)表示否定意思
反向预查:(?<=) 相对应的 (?<!)表示否定意思
前后紧跟字符
代码如下 | 复制代码 |
$regex = '/(?<=c)d(?=e)/'; /* d 前面紧跟c, d 后面紧跟e*/ if(preg_match($regex, $str, $matches)){ echo "n"; |
否定意义:
代码如下 | 复制代码 |
$regex = '/(?<!c)d(?!e)/'; /* d 前面不紧跟c, d 后面不紧跟e*/ if(preg_match($regex, $str, $matches)){ echo "n"; |
>字符宽度:零
验证零字符代码
代码如下 | 复制代码 |
$regex = '/HE(?=L)LO/i'; if(preg_match($regex, $str, $matches)){ echo "n"; |
打印不出结果!
代码如下 | 复制代码 |
$regex = '/HE(?=L)LLO/i'; if(preg_match($regex, $str, $matches)){ echo "n"; |
能打印出结果!
说明:(?=L)意思是HE后面紧跟一个L字符。但是(?=L)本身不占字符,要与(L)区分,(L)本身占一个字符。
捕获数据
没有指明类型而进行的分组,将会被获取,供以后使用。
> 指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。
> 在同一个表达式内的引用叫做反向引用。
> 调用格式: 编号(如1)。
代码如下 | 复制代码 |
$regex = '/^(Chuanshanjia)[ws!]+1$/'; if(preg_match($regex, $str, $matches)){ echo "n";
|
> 避免捕获数据
格式:(?:pattern)
优点:将使有效反向引用数量保持在最小,代码更加、清楚。
>命名捕获组
格式:(?P<组名>) 调用方式 (?P=组名)
代码如下 | 复制代码 |
$regex = '/(?P<author>chuanshanjia)[s]Is[s](?P=author)/i'; if(preg_match($regex, $str, $matches)){ echo "n"; |
运行结果
惰性匹配(记住:会进行两部操作,请看下面的原理部分)
格式:限定符?
原理:先匹配"?"前面的部分,然后再匹配右侧表达式,右侧表达式匹配成功则整个匹配结束。
先看下面的两个代码:
代码1.
代码如下 | 复制代码 |
$regex = '/(")[^1]+1/i'; if(preg_match($regex, $str, $matches)){ echo "n";
|
结果1.
代码2
代码如下 | 复制代码 |
$regex = '/(")[^1]+?1/i'; if(preg_match($regex, $str, $matches)){ echo "n"; |
结果2
分析:
比较两个正则表达式:第一个加了"?",第二个没有。
结果:主要看第一个参数:第一个把所有字符打印了出来,第二个只打印了个""a"".
结论:
>> 首先满足(")[^1]+1条件的有
"a", "a""b","a""b""c", "a""b""c""d", "b","b""c","b""c""d", "c","c""d", "d"
而第一个正则表达式却选择了最大的"a""b""c""d",说明非惰性匹配会把最大的匹配结果拿出来做比较。
>> 第二个正则表达式:先匹配(")[^1]+,如果匹配成功,那么我们在匹配“?”右边的1,如果匹配成功,则整个匹配结束。
其他案例:
代码如下 | 复制代码 |
"Oh, "my" God" =====> /(")([^1] | \1)*?(?<!\)1/i |
正则表达式的注释
格式:(?# 注释内容)
用途:主要用于复杂的注释
贡献代码:是一个用于连接MYSQL数据库的正则表达式
代码如下 | 复制代码 |
$regex = '/ $str = 'host=192.168.10.221|root|123456'; if(preg_match($regex, $str, $matches)){ echo "n"; |
特殊字符 | 解释 |
* | 0到多次 |
+ | 1到多次还可以写成{1,} |
? | 0或1次 |
. | 匹配除换行符外的所有单个的字符 |
w | [a-zA-Z0-9_] |
s | 空白字符(空格,换行符,回车符)[tnr] |
d | [0-9] |
首先是一个文件看能不能读取(权限问题),或者存在不,我们可以用is_readable函数获取信息.:
php/func_filesystem_is_readable.htm">is_readable函数用法
代码如下 | 复制代码 |
<?php |
输出:
test.txt is readable
利用file_get_contents函数来读取文件,这个函数可以读取大数据量的文件,也可以读取远程服务器文件,但必须在php.ini开始allow_url_fopen = On否则此函数不可用。
代码如下 | 复制代码 |
<?php $file = "filelist.php"; if (file_exists($file) == false) { die('文件不存在'); } $data = file_get_contents($file); echo htmlentities($data); ?> |
读取远程 文件,这是本教程这外的话题了。
代码如下 | 复制代码 |
function vita_get_url_content($url) { |
利用fread函数
来读取文件,这个函数可以读取指定大小的数据量
//fread读取文件实例一
代码如下 | 复制代码 |
$filename = "/www.111cn.net/local/something.txt"; |
//php5以上版本读取远程服务器内容
代码如下 | 复制代码 |
$handle = fopen("http://www.111cn.net/", "rb"); |
还有一种方式,可以读取二进制的文件:
代码如下 | 复制代码 |
$data = implode('', file($file)); |
fwrite 文件的写操作
fwrite() 把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 false。
文件写入函式:
代码如下 | 复制代码 |
<?php //文件写入函式 function PHP_Write($file_name,$data,$method="w") { $filenum=@fopen($file_name,$method); flock($filenum,LOCK_EX); $file_data=fwrite($filenum,$data); fclose($filenum); return $file_data; } ?> |
正则表达式(Regular Expression)
正则表达式系统:
1.POSIX
2.Perl
PHP中使用的regex是PCRE:
NOTE:PCRE(Perl兼容正则表达式,Perl Compatible Regular Expressions)
PCRE语法:
1.定界符
必须成对出现,可以使用除0-9a-zA-Z以外的任何字符
2.原子
1.正则需要匹配的可见和不可见字符都是原子
2.一个正则表达式最少含有一个原子
3.当需要匹配诸如"("、"["、"^"等含有语义的符号时需要用""反斜线进行转义
原子字符:
f 匹配换页符
n 匹配换行符
r 匹配回车符
t 匹配制表符
v 匹配垂直制表符
3.元字符
转义字符
^ 匹配字符串起始处
$ 匹配字符串末尾
. 匹配除"n"之外的任何单个字符
* 匹配前面的子表达式0或多次
+ 匹配前面的子表达式1次或多次
? 匹配前面的子表达式0次或1次
{n} 匹配n次
{n,} 匹配n次或n次以上
{n,m} 最少匹配n次至多匹配m次,(n<=m)
[] 中括号代表原子表,中间的原子地位都是相等。在匹配的时候,匹配表中的任意一个字符
[^] 抑扬符,排除后面的原子表所包含的字符。
(pattern) 匹配pattern并获取这一匹配。
num 对获取的第num个匹配的引用。
(?:pattern) 匹配pattern但不获取这一匹配
(?=pattern) 正向肯定预查,非获取匹配,例如:windows(?=XP|7)能匹配windowsXP中的windows不能匹配windows98中的windows
(?!=pattern) 正向否定欲查非获取匹配,例如:windows(?!98|2000),能匹配windowsXP中的windows,不能匹配windows98中的windows
(?<=pattern) 反向肯定预查,非获取匹配。例如:(?<=My|Postgre)SQL能匹配MySQL中的SQL,不能匹配MSSQL中的SQL
(?<!pattern) 反向否定预查,非获取匹配。例如:(?<!My|Postgre)SQL能匹配MSSQL中的SQL,不能匹配MySQL中的SQL
b 匹配单词边界
B 匹配除单词边界以外的字符
d 匹配任何一个数字。等价于[0-9]
D 匹配任何一个非数字以外的字符。等价于[^0-9]
s 匹配任何一个空白字符(包括空格、制表符、换页符等)。等价于[fnrtv]
S 匹配任何一个非空白字符。等价于[^fnrtv]
w 匹配任何一个数字、字母或下划线。等价于[0-9a-zA-Z]
W 匹配任何一个非数字、字母或下划线的字符。等价于[^0-9a-zA-Z]
4.模式修正符
i 不区分大小写
m 此模式中如果有回车或换行,^和$将匹配每行的行首和行尾
s 让.能匹配n
x 忽略空白
U 取消贪婪,相当于(.*?)
A 与^效果一样
D 结尾处不忽略回车 ,在结束处有$符的时候,在匹配的字符串后面加上回车,$依然能够匹配它成功。但是加上D之后,结尾的回车,不再匹配
NOTE:正则表达式是从左向右进行匹配的
常用的正则表达式
1、非负整数:”^d+$”
2、正整数:”^[0-9]*[1-9][0-9]*$”
3、非正整数:”^((-d+)|(0+))$”
4、负整数:”^-[0-9]*[1-9][0-9]*$”
5、整数:”^-?d+$”
6、非负浮点数:”^d+(.d+)?$”
7、正浮点数:”^((0-9)+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$”
8、非正浮点数:”^((-d+.d+)?)|(0+(.0+)?))$”
9、负浮点数:”^(-((正浮点数正则式)))$”
10、英文字符串:”^[A-Za-z]+$”
11、英文大写串:”^[A-Z]+$”
12、英文小写串:”^[a-z]+$”
13、英文字符数字串:”^[A-Za-z0-9]+$”
14、英数字加下划线串:”^w+$”
15、E-mail地址:”^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$”
16、URL:”^[a-zA-Z]+://(w+(-w+)*)(.(w+(-w+)*))*(?s*)?$”
下面这个用PHP写的函数,可以获取任意的字符串$string中的所有链接地址($string可以是从一个HTML页面文件直接读取出来的字符串),结果保存在一个数组中返回.该函数自动把电子邮件地址排除在外,而且返回的数组中不会有重复元素.
代码如下 | 复制代码 |
function GetAllLink($string) $regex[url] = "((http|https|ftp|telnet|news)://)?([a-z0-9_-/.]+.[][a-z0-9:;&#@=_~%?/.,+-]+)"; //去掉标签之间的文字 //去掉JAVASCRIPT代码 |
//去掉非<a>的HTML标签
代码如下 | 复制代码 |
$string = eregi_replace("<[^a][^<>]*>","", $string); //去掉EMAIL链接 //替换需要的网页链接 $output[0] = strtok($string, "t"); return $output; |
以下是以PHP的语法所写的示例
验证字符串是否只含数字与英文,字符串长度并在4~16个字符之间
代码如下 | 复制代码 |
<?php |
简易的台湾身分证字号验证
代码如下 | 复制代码 |
<?php |
下面的代码实现文字中的代码块,功能就如你在脚本之家看到的代码一样。
代码如下 | 复制代码 |
function codedisp($code) { |
HTTP-REFERER这个变量已经越来越不可靠了,完全就是可以伪造出来的东东。
1.php 请求 2.php 。
1.php代码:
代码如下 | 复制代码 |
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php"); curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8')); //构造IP curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/ "); //构造来路 curl_setopt($ch, CURLOPT_HEADER, 1); $out = curl_exec($ch); curl_close($ch); |
2.php代码如下:
代码如下 | 复制代码 |
function getClientIp() { if (!empty($_SERVER["HTTP_CLIENT_IP"])) $ip = $_SERVER["HTTP_CLIENT_IP"]; else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; else if (!empty($_SERVER["REMOTE_ADDR"])) $ip = $_SERVER["REMOTE_ADDR"]; else $ip = "err"; return $ip; } echo "IP: " . getClientIp() . ""; echo "referer: " . $_SERVER["HTTP_REFERER"]; |
伪造成功,这是不是给“刷票”的朋友提供了很好的换IP的方案!!
再看一下相对复杂的处理办法
以下是伪造方法:
代码如下 | 复制代码 |
PHP(前提是装了curl): PHP代码 $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://www.111cn.net"); curl_setopt ($ch, CURLOPT_REFERER, "http://www.111cn.net/"); curl_exec ($ch); curl_close ($ch); PHP(不装curl用sock) |
PHP代码
代码如下 | 复制代码 |
$server = '127.0.0.1'; $host = '127.0.0.1'; $target = '/xxx.asp'; $referer = 'http://127.0.0.1/'; // Referer $port = 80; $fp = fsockopen($server, $port, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />n"; } else { $out = "GET $target HTTP/1.1rn"; $out .= "Host: $hostrn"; $out .= "Cookie: ASPSESSIONIDSQTBQSDA=DFCAPKLBBFICDAFMHNKIGKEGrn"; $out .= "Referer: $refererrn"; $out .= "Connection: Closernrn"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } |
IP也可以伪造
代码如下 | 复制代码 |
$fp = fsockopen ("192.168.0.128", 80, $errno, $errstr, 30); $msg.="Client-IP: 1.1.1.1rn"; |
记住用fsockopen时,命令最后一定要有rnrn,不然会超时。
其实这个可以用$_SERVER['REMOTE_ADDR']来得到正确IP,但是人们为了得到代理访问IP,而采用的得到IP的方法往往不是$_SERVER['REMOTE_ADDR'],这就为我们提供了机会。
这里另外一篇关于 curl 伪造 ip地址的文章有兴趣的同学可以参考一下
http://www.111cn.net/phper/php-cy/39779.htm
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源代码贴在下面: 复制代码 代码如下: <script type="text/javascript"> function Person(){}...2014-05-31
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 复制代码 代码如下: //element:需要添加新样式的元素,value:新的样式 function addClass(element, value ){ if (!element.className){ element.className = value; }else { newClassName = element.className; newClas...2014-05-31
- 在javascritp中,不一定只有对象方法的上下文中才有this, 全局函数调用和其他的几种不同的上下文中也有this指代。 它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下...2015-03-15
- 这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
- 首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var resul...2015-11-08
- 事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQue...2014-06-07
- 取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
- 有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? 复制代码 代码如下: var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; } document.write(k); 答案是显示10,这道题主要考察JavaScript的逗...2015-03-15
JavaScript学习笔记整理_setTimeout的应用
下面小编就为大家带来一篇JavaScript学习笔记整理_setTimeout的应用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-03- 这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
- 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树: 通过可编程的对象模型,Java...2015-10-23
- 1、ActiveX向Javascript传参 复制代码 代码如下: <script language="javascript" for="objectname" event="fun1(arg)"> fun2(arg); </script> objectname为ActiveX控件名,通过<object>标签里的id属性设定,如下; 复制...2014-06-07
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20- Window有navigator对象让我们得知浏览器的全部信息.我们可以利用一系列的API函数得知浏览器的信息.JavaScript代码如下:function message(){ txt = "<p>浏览器代码名: " + navigator.appCodeName + "</p>";txt+= "<p>...2015-11-24
- 这篇文章主要为大家介绍了JavaScript设计模式中的装饰者模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下...2016-01-21
- 神马是“解释器模式”?先翻开《GOF》看看Definition:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如...2014-06-07
- 虽然ES6都还没真正发布,但已经有用ES6重写的程序了,各种关于ES789的提议已经开始了,这你敢信。潮流不是我等大众所能追赶的。潮流虽然太快,但我们不停下学习的步伐,就不会被潮流丢下的,下面来领略下ES6中新特性,一堵新生代JS...2015-11-24
- 这篇文章主要介绍了JS中的compose函数和pipe函数用法,想深入了解Javascript的同学,可以参考下...2021-04-27