我试过了:
print_r(preg_match("[A-Za-z\\-]", $str));
我变得虚假。我不是很擅长正则表达式,但它似乎适用于http://regexpal.com/
我在这里错过了什么吗?
编辑:
例如$str = zREBsZtyvw
答案 0 :(得分:6)
此表达式将确保在没有空格的字符串中有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
)
)
答案 1 :(得分:3)
Jerry和Yomy各自确定了问题的一半。这是整个解决方案:
print_r(preg_match("/^[A-Za-z\\-]*$/", $str));
preg_match
要求您在regexp的开头和结尾都有匹配的分隔符。你需要锚定正则表达式,以便检查整个字符串,而不只是在强大的任何地方寻找匹配。并且您需要使用*
通配符来匹配任意数量的字符。
答案 2 :(得分:2)
是的,使用锚点(^
和$
)指定您只使用这些字符将开始和结束字符串:
print_r(preg_match("/^[A-Za-z\\-]$/", $str));
^ ^
答案 3 :(得分:1)
实际上 - 你在模式的开头和结尾都缺少转义字符(/), 并且你使用的[]只匹配组中的一个字符
最好的模式是使用重复和开始/结束锚点
“/ ^ [A-ZA-Z - ] * $ /”
print_r(preg_match(“/ ^ [a-zA-Z - ] * $ /”,$ str));
答案 4 :(得分:0)
不需要双反斜杠..但你也需要在正则表达式的开头和结尾分隔符(/'s)
print_r(preg_match("/^[A-Za-z\-]+$/", $str));
我已经使用了+代替*,因为你想要匹配1个或更多。使用*,空字符串将匹配。