PHPVerbalExpressions是一个基于自然语言的PHP正则数据验证工具,虽然基于正则表达式,但其将常用的过滤器转换为自然语言,使不熟悉正则表达式的人也可以在项目中方便的用正则公式来对数据进行过滤和分析。
例如要验证一个字符串是否为网址,通常用正则方式的代码如下
1 2 3 4 |
<?php $regex = '@(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))@'; var_dump( preg_match($regex, 'http://news.qq.com/a/20160115/009079.htm') ); //true |
但是上面一长串正则代码正常人是看不懂的,而用PHPVerbalExpressions就简单明了了许多
1 2 3 4 5 6 7 8 9 10 11 12 |
$regex->startOfLine() ->then("http") ->maybe("s") ->then("://") ->maybe("www.") ->anythingBut(" ") ->endOfLine(); if($regex->test("http://github.com")) echo "valid url". '<br>'; else echo "invalid url". '<br>'; |
其中,startOfLine()+then(http)表示字符串以http开头,maybe(s)+then(://)+maybe(www.)表示在http之后可能会有s然后接着是://之后可能会有www,anythingBut()+endOfLine()表示在http(s)://(www.)之后一直到字符串结束都是除了空格外的字符,
因为PHPVerbalExpressions本身是基于正则的,所以除了使用其自带的 $regex->test 方法来验证字符串外,还可以使用系统方法来进行正则比对,例如
1 2 3 4 5 |
if (preg_match($regex, 'http://github.com')) { echo 'valid url'; } else { echo 'invalud url'; } |
当然,还可以将以上通过自然语音生成的过滤器导出为正则表达式
1 2 |
echo "<pre>". $regex->getRegex() ."</pre>"; //will echo /^(?:http)(?:s)?(?:\:\/\/)(?:www\.)?(?:[^ ]*)$/m |
除了验证字符串外,PHPVerbalExpressions还可以对字符串进行处理,同样是用自然语言,下面代码将字符串中的前4个空格换成-
1 2 3 |
echo $regex->clean(array("modifiers" => "m", "replaceLimit" => 4)) ->find(' ') ->replace("This is a small test http://somesite.com and some more text.", "-"); |
其中, ->clean 方法用于清空缓存并设置新规则,其中 "modifiers" => "m" 参数同preg_replace中的pattern
There are no comments yet