在PHP中的正则表达式验证

验证是处处为站长的共同关注。如果有人进入形式的信息,您需要验证它!但是,这样做最简单的方法是什么?

嗯,处理大量的文本模式,需要遵循时,我总是转向正则表达式。正则表达式是你定义一个模式的一种方式。 虽然我不会教你的Regex,我会告诉正则表达式在PHP。PHP主要使用了Perl的regex的味道。这就是为什么要执行的功能在PHP正则表达式preg_match。执行Perl的正则表达式匹配,怎么做呢?无论如何,有某些修饰符,可以添加到PHP中的格局,影响它如何执行。 例如,“我”,使得它不区分大小写。我不得不这样做,电子邮件地址模式,因为它缩短假设您使用区分大小写的正则表达式模式的可读性。然后,有“米”修饰符将治疗一个多行的主题,实际上多个内衬。否则将被忽略,换行符(N)和锚点(^和$)将假定你的意思是整个主题的开头和结尾。“S”是有用的,如果你经常使用正则表达式的模式,不以^开始并没有一致的起始字符。 为了确定,如果该用户名,密码和验证密码是正确的,我以为只有字母数字字符是允许的。因此,寻找一切可能是一个潜在的错误的字符,而不是我是不是字母的字符搜索。这是由在字符类的字符^ [:^ A-ZA-Z0-9]。然后,后来,如果有一个比赛,我知道有一个在外地的无效字符。 同时请记住,有元字符,需要在正则表达式转义。我这个建议preg_quote 电子邮件和URL值是比较困难的,特别是因为这些标准是很难界定的。例如,在常规expressions.info,相当冗长的辩论已经到电子邮件的regex。从技术上来说,一个有效的电子邮件地址可以包含单引号。对于大多数的电子邮件地址,列出将是有效的。URL包含了类似的问题。众多的顶级域名,和一个列表是很难聚集。人也有一种倾向,只是说“software8.co”代替“http://software8.co”。也有情况下顶级域名中包含一个国家的价值,以及,像“google.co.uk”, 我不建议尝试,包括尽可能多的,你可以。如果您尝试,以满足大家,你最终验证上花费这么多时间,它已不再是可行的。验证用户输入,在你的代码是什么权宜之计,而不是根据是什么,他们将进入。 此外,regex是不是每一个问题的解决(虽然它是为大多数)。如果您要验证的东西,有许多例外或极其复杂,它成为一件苦差事。我什至不能想象试图日期和时间格式。中午12时或午夜吗?是12:60有效吗?约17:00怎么样?你需要上午和下午要输入吗?3意味着同为3:00?这些东西都是最好留给人类或其他一些方法,你可以制定。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php<br>
<br>
$un  = $_POST [ "user" ];<br>
$pw  = $_POST [ "pass" ];<br>
$pw2  = $_POST [ "pass2" ];<br>
$em  = $_POST [ "email" ];<br>
$url  = $_POST [ "url" ];<br>
<br>
$info  = array ( $un , $pw , $pw2 , $em , $url );<br>
<br>
foreach  ( $info  as  $idx  => $unit ) {<br>
         switch  ( $idx ) {<br>
                 case  4:<br>
$rgx  = "/^((ftp|http|https)://(w+:{0,1}w*@)?)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?$/" ;<br>
                 break ;<br>
<br>
                 case  3:<br>
                         $rgx  = "/^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$/i" ;<br>
                 break ;<br>
<br>
                 case  2:<br>
                         //read below<br>
                         $rgx  = "/[^A-Za-z0-9]+/" ;<br>
                 break ;<br>
<br>
                 case  1:<br>
                         //read below<br>
                         $rgx  = "/[^A-Za-z0-9]+/" ;<br>
                 break ;<br>
<br>
                 case  0:<br>
                         //if characters are NOT normal<br>
                         $rgx  = "/[^A-Za-z0-9]+/" ;<br>
                 break ;<br>
<br>
                 default :<br>
                         echo  "???" ;<br>
                         die ( "$unit ?" );<br>
                 break ;<br>
         }<br>
<br>
         $n  = preg_match( $rgx , $unit , $matches );<br>
         if  ( ( $idx  == 0) || ( $idx  == 1) || ( $idx  == 2) ){<br>
                 if  ( $n ) {<br>
                         echo  "Bad Characters in $unit; Alphanumeric only<br />" ;<br>
                 }<br>
         } else  {<br>
                 if  ( $n  == 0) {<br>
                         echo  "Incorrect Format in $unit; Enter Valid Info<br />" ;<br>
                 }<br>
         }<br>
}<br>
<br>
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值