<?PHP,REGEX和我.三幕中的悲剧

2 php regex

长时间的倾听者.第一次来电...

不是严格意义上的PHP问题,因为它涉及正则表达式,但这个让我撕裂我的头发.

我有3个正则表达式,我想创建,只有一个正常工作.

现在我不确定这是否是由于以下事实:

  1. 我不懂preg_match和ereg及其返回代码,因为我在PHP工作了大约7年.
  2. 我的正则表达式是完全错误的.
  3. 我精神残疾.

无论哪种方式,这些表达方式和我使它们工作的微弱尝试.

1)匹配以2,3,4或5开头,然后是5位数的任何数字.(这个我认为有效)

码:

if (!ereg('/[2-5]\d{5}/', $_POST['packageNumber' )
{
   echo "The package number is not the correct format.";
}
Run Code Online (Sandbox Code Playgroud)

2)匹配任何以2,3,4或5开头的数字,然后是5位数,然后是1或2.

if (!ereg("/[2-5]\d{5}\.[1-2]/", $_POST['packageModifier' )
{
   echo "The package modifier is not the correct format.";
}
Run Code Online (Sandbox Code Playgroud)

3)匹配字母数字,空格,句号和超量的任意组合,最多50个字符.

if (!ereg("/[0-9a-zA-Z\s\-\.]{0,50}/", $_POST['customerNumber' )
{
   echo "The customer number is not the correct format.";
}
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我我做错了什么我会给他们我的第一个出生.

Gum*_*mbo 8

您正在混合PCRE函数POSIX正则表达式函数.您正在使用具有POSIX正则表达式函数的Perl兼容正则表达式.

所以替换eregpreg_match它应该工作:

if (!preg_match('/^[2-5]\d{5}$/', $_POST['packageNumber'])) {
    echo "The package number is not the correct format.";
}
if (!preg_match("/^[2-5]\d{5}\.[1-2]$/", $_POST['packageModifier'])) {
    echo "The package modifier is not the correct format.";
}
if (!preg_match("/^[0-9a-zA-Z\s\-.]{0,50}$/", $_POST['customerNumber'])) {
    echo "The customer number is not the correct format.";
}
Run Code Online (Sandbox Code Playgroud)

除了修复PHP语法错误,我还为要匹配的字符串的start(^)和end($)添加了锚点.