我尝试过:
print_r(preg_match("[A-Za-z\\-]", $str));
我得到了false。我不太擅长正则表达式,但它在http://regexpal.com/上似乎有效。
这里有什么我漏掉的吗?
编辑:
例如:$str = zREBsZtyvw
我尝试过:
print_r(preg_match("[A-Za-z\\-]", $str));
我得到了false。我不太擅长正则表达式,但它在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
)
)
print_r(preg_match("/^[A-Za-z\\-]*$/", $str));
preg_match
要求您在正则表达式的开头和结尾使用匹配的定界符。您还需要锚定正则表达式,以便它将检查整个字符串,而不仅仅是在字符串中查找匹配项。并且您需要使用 *
通配符来匹配任意数量的字符。
是的,请使用锚点(^
和$
)来指定您的字符串仅以这些字符开头和结尾:
print_r(preg_match("/^[A-Za-z\\-]$/", $str));
^ ^
警告:preg_match():未找到结束定界符'^'
- meiryo实际上-您的模式开头和结尾缺少转义字符(/),并且您使用了[],它只匹配组中的一个字符
最佳模式应该使用重复和开始/结束锚点
"/ ^ [a-zA-Z-] * $ /"
print_r(preg_match("/ ^ [a-zA-Z-] * $ /", $str));
不需要双反斜杠..但是你还需要在正则表达式的开头和结尾加上分隔符(/'s)
print_r(preg_match("/^[A-Za-z\-]+$/", $str));
我使用了“+”而不是“*”,因为您想匹配1个或多个。如果使用“*”,则空字符串将匹配。
+
代替{1,}
。 - Tim Pietzcker+
和{1,}
在功能上是相同的,但是如果您稍后决定要匹配至少2个或最多X个内容,则使用{1,}
更容易查找和修改。 - Ro Yo Mi