Php 添加+;字符串验证上的o-match
我有一个用于验证00000000到99999999之间的值的正则表达式。 现在我需要添加一个从+/-00000000到+/-99999999的正/负验证 我使用:Php 添加+;字符串验证上的o-match,php,regex,Php,Regex,我有一个用于验证00000000到99999999之间的值的正则表达式。 现在我需要添加一个从+/-00000000到+/-99999999的正/负验证 我使用: /^[0-9]{8,10}$/ 但无法添加+/-验证,我尝试: /(-|+)(^[0-9]{8,10})$/ /[-+](^[0-9]{8,10})$/ /^[-+][0-9]{8,10}$/ 如何验证字符串+/-00000000->+/-9999999 [编辑] 使用: 验证模式应为: +/-00
/^[0-9]{8,10}$/
但无法添加+/-验证,我尝试:
/(-|+)(^[0-9]{8,10})$/
/[-+](^[0-9]{8,10})$/
/^[-+][0-9]{8,10}$/
如何验证字符串+/-00000000->+/-9999999
[编辑]
使用:
验证模式应为:
+/-0000.01.01
+/-9999.12.31
+/-10000.01
+/-9999999.12
+/-10000000
+/-9999999999
这是约会用的。。
我得到这个错误:
编译失败:在偏移量3处没有要重复的内容
可能是因为脚本试图验证第一个和第二个模式。。。99%
我还发现模式验证+00000000(8位)是错误的,因为我需要从+10000000开始,没有理由这不起作用:
<?php
$string = '-0000000000';
$pattern = '/^[-+][0-9]{8,10}$/';
if (preg_match($pattern, $string, $matches)) {
print_r($matches);
}
else {
print 'No matches found.';
}
没有理由这不起作用:
<?php
$string = '-0000000000';
$pattern = '/^[-+][0-9]{8,10}$/';
if (preg_match($pattern, $string, $matches)) {
print_r($matches);
}
else {
print 'No matches found.';
}
问题不在正则表达式中,而在if语句的逻辑中。你写道:
if (!preg_match(...) || !preg_match(...) || !preg_match(...)) { ...
您应更正为:
if (!preg_match(...) && !preg_match(...) && !preg_match(...)) { ...
或
问题不在正则表达式中,而在if语句的逻辑中。你写道:
if (!preg_match(...) || !preg_match(...) || !preg_match(...)) { ...
您应更正为:
if (!preg_match(...) && !preg_match(...) && !preg_match(...)) { ...
或
请尝试以下方法:
if (
!preg_match("/^[-+][0-9]{4}\.(((0[13578]|(10|12))\.(0[1-9]|[1-2][0-9]|3[0-1]))|(02\.(0[1-9]|[1-2][0-9]))|((0[469]|11)\.(0[1-9]|[1-2][0-9]|30)))$/", $_POST[$field] ) &&
!preg_match("/^[-+][1-9][0-9]{4,6}\.(0[1-9]|1[0-2])$/", $_POST[$field] ) &&
!preg_match("/^[-+][1-9][0-9]{7,9}$/", $_POST[$field] )
) {
$this->errors[] = $errorMessage;
}
您的第二个正则表达式试图匹配日期,而您的第一个正则表达式需要有转义句点。我更改了一些范围以避免像您提到的那样00000000
除此之外,您错误地放置了线锚的开头,并使用了|
而不是&&
,因为这三种方法都不能给出错误。请尝试以下方法:
if (
!preg_match("/^[-+][0-9]{4}\.(((0[13578]|(10|12))\.(0[1-9]|[1-2][0-9]|3[0-1]))|(02\.(0[1-9]|[1-2][0-9]))|((0[469]|11)\.(0[1-9]|[1-2][0-9]|30)))$/", $_POST[$field] ) &&
!preg_match("/^[-+][1-9][0-9]{4,6}\.(0[1-9]|1[0-2])$/", $_POST[$field] ) &&
!preg_match("/^[-+][1-9][0-9]{7,9}$/", $_POST[$field] )
) {
$this->errors[] = $errorMessage;
}
您的第二个正则表达式试图匹配日期,而您的第一个正则表达式需要有转义句点。我更改了一些范围以避免像您提到的那样00000000
除此之外,您错放了线锚的开头,并使用了|
而不是&&
,因为这三个都不能给出错误。第三个应该可以工作。。。可能是/^[-+]?[0-9]{8,10}$/
。有什么问题吗?+o-不是可选的。。我正在使用preg_match函数验证输入字段,但三种模式都不起作用第三种模式应该起作用。。。可能是/^[-+]?[0-9]{8,10}$/
。有什么问题吗?+o-不是可选的。。我正在使用preg_match函数来验证输入字段,但三种模式都不起作用。我发现了问题,我正在用三种模式验证字符串,问题出现在另外两种模式之一。。这项工作:/^[-+][0-9]{8,10}$/我发现了问题,我正在用3种模式验证字符串,问题在另外2种模式之一上。。这项工作:/^[-+][0-9]{8,10}$/