4

我试过了:

print_r(preg_match("[A-Za-z\\-]", $str));

我越来越假了。我不太擅长正则表达式,但它似乎适用于http://regexpal.com/

我在这里错过了什么吗?

编辑:例如$str = zREBsZtyvw

4

5 回答 5

7

描述

此表达式将确保字符串中有 1 个或多个大写字母、小写字母或连字符,且没有空格

^[A-Za-z\\-]{1,}$

在此处输入图像描述

匹配模式说明:

(^[A-Za-z\\-]{1,}$)

匹配如下:

(团体

^ 字符串的开头

[A-Za-z\\-]{1,} 任何字符:'A' 到 'Z'、'a' 到 'z'、'\'、'-'(至少 1 次(匹配尽可能多的数量))

$ 在可选的 \n 之前和字符串的结尾

)分组结束

PHP 代码示例:

<?php
$sourcestring="zREBsZtyvw";
preg_match_all('/^[A-Za-z\\-]{1,}$/i',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

$matches Array:
(
    [0] => Array
        (
            [0] => zREBsZtyvw
        )

)
于 2013-05-25T18:57:24.680 回答
3

Jerry 和 Yomy 各自发现了一半的问题。这是整个解决方案:

print_r(preg_match("/^[A-Za-z\\-]*$/", $str));

preg_match要求您在正则表达式的开头和结尾有匹配的分隔符。而且您需要锚定正则表达式,以便它检查整个字符串,而不仅仅是在强项中的任何地方寻找匹配项。并且您需要使用*通配符来匹配任意数量的字符。

于 2013-05-25T18:51:26.300 回答
2

是的,使用锚 (^$) 来指定您的字符串仅以这些字符开头结尾:

print_r(preg_match("/^[A-Za-z\\-]$/", $str));
                     ^           ^
于 2013-05-25T18:47:08.860 回答
1

实际上 - 您在模式的开头和结尾都缺少转义字符 (/),并且您使用的 [] 仅匹配组中的一个字符

最好的模式是使用重复和开始/结束锚点

"/^[a-zA-Z-]*$/"

print_r(preg_match("/^[a-zA-Z-]*$/", $str));

于 2013-05-25T18:48:08.017 回答
0

不需要双反斜杠..但您还需要在正则表达式的开头和结尾处使用分隔符(/'s)

print_r(preg_match("/^[A-Za-z\-]+$/", $str));

我使用 + 而不是 * 因为你想匹配 1 个或更多。使用 *,将匹配一个空字符串。

于 2013-05-25T18:53:29.077 回答