我总共花了n00b来使用正则表达式(我不是程序员而是支持工程师),为了解决工作中的问题,我需要将两个正则表达式组合成一个正则表达式:
<?php
//first i retrieved the recaptcha coming through post method.
//i have used post method, you can use any method you want.
$recaptcha = $_POST['g-recaptcha-response'];
//After retrieving send a post curl request to verify it.
//you will have to send your secret key along with it.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"secret=*******************************=".$recaptcha);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
$server_output = json_decode($server_output,true);
curl_close ($ch);
if($server_output['success']){
// captacha validated successfully.
}else{
// invalid captcha
}
&安培;
^89410[1|2]000[0-9]{10}|893207000500[0-9]{7}$
请注意我没有创建这两个正则表达式,它们是由不再适用于我的工作的开发人员创建的! 再一次,我以前从未使用过正则表达式,所以任何帮助都会非常感激!
答案 0 :(得分:1)
你的第一个正则表达式是测试两个可能的正则表达式(|
将两者分开)。如果你想添加其他可能性,那就是添加另一个由另一个|
分隔的可能性。 (开头和结尾的^
和$
标志着 - 输入的开头和结尾。)
但是,在您的情况下,与第一个正则表达式的第二部分匹配的可能字符串(数字)是与新正则表达式匹配的字符串的一部分(您的第二个),(Phew ...仍然和我一起?;)从而使第一部分的第二部分变得不必要了。
您可以看到它的示例here at regex101。删除中间部分,你仍然会得到相同的匹配。
所以,简短的回答是 -
^89410[1|2]000[0-9]{10}|893207000[0-9]{10}$
是你想要的。
问候。
编辑:
正如Wiktor指出的那样(我很想念它:P)您需要对正则表达式进行分组,或者将开始/结束标记分别添加到每个正则表达式,如^89410[1|2]000[0-9]{10}$|^893207000[0-9]{10}$
。
答案 1 :(得分:0)
您可以使用
^(89410[12]000[0-9]{10}|893207000500[0-9]{7}|893207000[0-9]{10})$
^ ^^^^^^^^^^^^^^^^^^^^
或更短,更有效,但不太可读:
^(89410[12]000[0-9]{10}|893207000(?:500[0-9]{7}|[0-9]{10}))$
问题是第一种模式中的^
和$
分别仅适用于第一种和最后一种选择。您需要使用分组(...)
。