Regex使用javascript,但不使用PHP
Regex works in javascript but not in PHP
我有一个regexp来检查在Javascript中工作的电子邮件地址:
var re = /^([0-9a-zA-Z]([-.'w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-'w]*[0-9a-zA-Z]'.)+[a-zA-Z]{2,9})$/;
"any.address@gmail.com".search(re); // returns 0
但是当我在PHP中使用preg_match()时,使用相同的regexp和电子邮件是不起作用的!
$re = "/^([0-9a-zA-Z]([-.'w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-'w]*[0-9a-zA-Z]'.)+[a-zA-Z]{2,9})$/";
echo preg_match($re,"any.address@gmail.com");
// echoes 0 - not 1!!
编辑
好的,所以我必须补充更多的细节。
完整的代码在这里:
$re = '/^([0-9a-zA-Z]([-.'w'+'%'#'!'$'''*'/'='?'^'`'{'|'}'~]*[0-9a-zA-Z])*@([0-9a-zA-Z][-'w]*[0-9a-zA-Z]'.)+[a-zA-Z]{2,9})$/';
if(is_array($recipients)){
for($i=0;$i<count($recipients);$i++){
echo preg_match($re,$recipients[$i]) . " - " . $recipients[$i] . "<br />";
}
}
当我只执行preg_match()(在for循环之外)时,它将正确匹配模式。但如果它在这个循环中,那么它就不会验证!
您忘记了在双引号字符串中使用反斜杠在PHP中具有特殊意义。
你甚至echo $re;
只是为了确认模式是你所期望的吗?我建议切换到模式的单引号字符串,或者确保转义每个'
。
$re = "/^([0-9a-zA-Z]([-.''w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-''w]*[0-9a-zA-Z]''.)+[a-zA-Z]{2,9})$/"
$re = '/^([0-9a-zA-Z]([-.'w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-'w]*[0-9a-zA-Z]'.)+[a-zA-Z]{2,9})$/';
顺便说一句,正如其他人所提到的,它确实返回1。
我想我会提到转义,因为当使用双引号时,它可能或将成为模式的问题(即使在本例中不是)
通常建议使用PHPs内置正则表达式进行电子邮件验证,该正则表达式具有更广泛的语法变体:
filter_var($email, FILTER_VALIDATE_EMAIL)
参见filter_var
但是顺便说一句,FILTER_VALIDATE_EMAIL
也是用正则表达式实现的。看见https://github.com/php/php-src/blob/master/ext/filter/logical_filters.c#L522为此。
不过,这与您最初遇到的空白问题无关。
您需要使用单引号,以便忽略转义符。
$re = '/^([0-9a-zA-Z]([-.'w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-'w]*[0-9a-zA-Z]'.)+[a-zA-Z]{2,9})$/';
preg_match_all($re, 'any.address@gmail.com', $arr, PREG_PATTERN_ORDER);
var_dump($arr);
相关文章:
- 可以't使用PHP使用Froala编辑器上传图像URL
- php使用ajax创建了select标记
- PHP使用AJAX和DataTables发布数据
- PHP使用子窗口中的单选按钮确定从子窗口向父窗口文本区域插入什么
- 使用AngularJs,尝试通过Google App Engine上的PHP使用HTML联系我们表单发送电子邮件
- 使用php使用href链接将输入的文本框值传递到另一个页面
- php:使用javascript时未插入组合框值
- php使用ajax生成html表,以应用用户操作,如删除、更新和编辑
- 如何在使用php使用jquery编辑文件后保存文件
- PHP使用Facebook API随机结束或中断
- 如何发送不同的表单,并让 php 使用 $.ajax 将其作为一个表单阅读
- PHP 使用选择值来设置变量
- PHP 使用 file_get_contents 从.txt文件中获取最后五个单词
- 使用 PHP 使用 Appcelerator Cloud 上传照片
- 下载由PHP使用AJAX创建的PDF
- PHP 使用客户端和服务器端验证,而无需使用第三方代码
- 使用 PHP 使用 Web 服务
- JavaScript 中的 PHP 使用 document.write();.
- 从 PHP 使用 D3.json() 获取 JSON 数据不起作用
- PHP - 使用 Javascript 和 PHP 上传多个文件