add + o - 匹配字符串验证

时间:2013-09-07 18:51:54

标签: php regex

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

我用:

    /^[0-9]{8,10}$/

但是我尝试不能添加+/-验证:

    /(-|+)(^[0-9]{8,10})$/
    /[-+](^[0-9]{8,10})$/
    /^[-+][0-9]{8,10}$/

如何验证字符串+/- 00000000 - > +/- 9999999999?

[编辑] 使用:

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( "/^[-+]([0-9]{5,7}).((0[13578]|(10|12))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))$/", $_POST[$field] ) ||
    !preg_match( "/^[-+][0-9]{8,10}$/", $_POST[$field] )
) {
    $this->errors[] = $errorMessage;
}

验证模式应为:

+/- 0000.01.01 +/- 9999.12.31

+/- 10000.01 +/- 9999999.12

+/-千万 +/- 9999999999

这是为了约会目的.. 我收到此错误:  编译失败:无法在偏移量3处重复

也许是因为脚本试图验证第一和第二种模式...... 99%

我还看到模式验证了一个错误的+00000000(8digit),因为我需要从+10000000开始

3 个答案:

答案 0 :(得分:2)

没理由这不起作用:

<?php
$string = '-0000000000';
$pattern = '/^[-+][0-9]{8,10}$/';
if (preg_match($pattern, $string, $matches)) {
  print_r($matches);
}
else {
  print 'No matches found.';
}

答案 1 :(得分:1)

问题不在你的正则表达式中,而是简化了if语句的逻辑。你写道:

if (!preg_match(...) || !preg_match(...) || !preg_match(...)) { ...

你应该改为:

if (!preg_match(...) && !preg_match(...) && !preg_match(...)) { ...

if (!(preg_match(...) || preg_match(...) || preg_match(...))) { ...

答案 2 :(得分:0)

请改为尝试:

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

除此之外,你错误地放置了行锚的开头并使用了||而不是&&,因为这三个都不能给出错误。