0

我不擅长正则表达式。如何做一个php正则表达式,判断一个字符串第一个词是(a-h),第二个词是@,第三部分是数字(长度范围从4-15)?

我的 php 正则表达式对吗?

$title  =  'c@356920'; //h@907659042423
if (preg_match ("/^[a-h]{1}\@[0-9]{4,15}/i", $title)) {
    echo 'ok';
}
4

3 回答 3

0

如果这就是您需要匹配的全部内容,则需要添加后锚符号 ( $)。因此,您需要将代码从该更改为:

$title  =  'c@356920'; //h@907659042423
if (preg_match ("/^[a-h]{1}@[0-9]{4,15}$/i", $title)) {
    echo 'ok';
}

您也不需要转义@符号。按原样,您的正则表达式将匹配以该序列开头的任何字符串,但允许随后跟随任何其他数量的数据(从问题中我无法判断这是否是您所追求的东西)。

于 2012-08-07T08:55:09.610 回答
0

到目前为止看起来不错,但有两个小改动

/^[a-h]{1}@[0-9]{4,15}$/i
  • 不要逃避@
  • $最后,因为否则之后您允许任意数量的任意字符(它是“行尾”-锚点)。
于 2012-08-07T08:55:56.780 回答
0

如果我们在这里打高尔夫球,我建议:

/^[a-h]@\d{4,15}$/i

(删除 {1} 并将 [0-9] 替换为 \d)

于 2012-08-07T11:15:17.413 回答