我试过了:
print_r(preg_match("[A-Za-z\\-]", $str));
我越来越假了。我不太擅长正则表达式,但它似乎适用于http://regexpal.com/
我在这里错过了什么吗?
编辑:例如$str = zREBsZtyvw
我试过了:
print_r(preg_match("[A-Za-z\\-]", $str));
我越来越假了。我不太擅长正则表达式,但它似乎适用于http://regexpal.com/
我在这里错过了什么吗?
编辑:例如$str = zREBsZtyvw
此表达式将确保字符串中有 1 个或多个大写字母、小写字母或连字符,且没有空格
^[A-Za-z\\-]{1,}$
(^[A-Za-z\\-]{1,}$)
匹配如下:
(
团体
^
字符串的开头
[A-Za-z\\-]{1,}
任何字符:'A' 到 'Z'、'a' 到 'z'、'\'、'-'(至少 1 次(匹配尽可能多的数量))
$
在可选的 \n 之前和字符串的结尾
)
分组结束
<?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
)
)
Jerry 和 Yomy 各自发现了一半的问题。这是整个解决方案:
print_r(preg_match("/^[A-Za-z\\-]*$/", $str));
preg_match
要求您在正则表达式的开头和结尾有匹配的分隔符。而且您需要锚定正则表达式,以便它检查整个字符串,而不仅仅是在强项中的任何地方寻找匹配项。并且您需要使用*
通配符来匹配任意数量的字符。
是的,使用锚 (^
和$
) 来指定您的字符串仅以这些字符开头和结尾:
print_r(preg_match("/^[A-Za-z\\-]$/", $str));
^ ^
实际上 - 您在模式的开头和结尾都缺少转义字符 (/),并且您使用的 [] 仅匹配组中的一个字符
最好的模式是使用重复和开始/结束锚点
"/^[a-zA-Z-]*$/"
print_r(preg_match("/^[a-zA-Z-]*$/", $str));
不需要双反斜杠..但您还需要在正则表达式的开头和结尾处使用分隔符(/'s)
print_r(preg_match("/^[A-Za-z\-]+$/", $str));
我使用 + 而不是 * 因为你想匹配 1 个或更多。使用 *,将匹配一个空字符串。