Php 添加+;字符串验证上的o-match

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

我有一个用于验证00000000到99999999之间的值的正则表达式。 现在我需要添加一个从+/-00000000到+/-99999999的正/负验证

我使用:

    /^[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}$/