Php 使用preg_match检查字符串是否仅包含a-Z、a-Z和-(破折号)字符
我试过:Php 使用preg_match检查字符串是否仅包含a-Z、a-Z和-(破折号)字符,php,regex,Php,Regex,我试过: print_r(preg_match("[A-Za-z\\-]", $str)); 我变得虚伪了。我对正则表达式不是很在行,但它似乎对我有用 我是不是遗漏了什么 编辑: e、 g.$str=zREBsZtyvw是,使用锚(^和$)指定字符串仅以以下字符开头和结尾: print_r(preg_match("/^[A-Za-z\\-]$/", $str)); ^ ^ 实际上-在模式的开头和结尾缺少转义字符(/), 您使用了[
print_r(preg_match("[A-Za-z\\-]", $str));
我变得虚伪了。我对正则表达式不是很在行,但它似乎对我有用
我是不是遗漏了什么
编辑:
e、 g.$str=zREBsZtyvw
是,使用锚(^
和$
)指定字符串仅以以下字符开头和结尾:
print_r(preg_match("/^[A-Za-z\\-]$/", $str));
^ ^
实际上-在模式的开头和结尾缺少转义字符(/), 您使用了[],它只匹配组中的一个字符 最好的模式是使用重复和开始/结束锚定 “/^[a-zA-Z-]*$/”
打印(预匹配(“/^[a-zA-Z-]*$/”,$str)) Jerry和Yomy各自发现了一半的问题。以下是整个解决方案:
print_r(preg_match("/^[A-Za-z\\-]*$/", $str));
preg_match
要求在regexp的开头和结尾有匹配的分隔符。您需要锚定regexp,以便它能够检查整个字符串,而不仅仅是在strong中的任何地方查找匹配项。您需要使用通配符来匹配任意数量的字符。不需要双反斜杠。。但是,在正则表达式(/)的开头和结尾还需要分隔符
我使用了+而不是*来匹配1个或更多。如果使用*,则将匹配空字符串。Description
此表达式将确保字符串中有1个或多个大写、小写或hypens,且不包含空格
^[A-Za-z\\-]{1,}$
匹配模式说明:
(^[A-Za-z\\-]{1,}$)
匹配项如下:
(
组
^
字符串的开头
[A-Za-z\\-]{1,}
任意字符:'A'到'z','A'到'z','\','-'(至少1次(匹配尽可能多的数量))
$
在可选的前\n和字符串的结尾
)
分组结束
PHP代码示例:
$matches数组:
(
[0]=>阵列
(
[0]=>zREBsZtyvw
)
)
我收到这个警告:警告:preg_match():找不到结尾分隔符“^”
@meiryo-ah,我忘了preg_match()在正则表达式前后都需要斜杠。我对它不太熟悉。请参阅编辑后的答案。此选项有效,但仍需要0-9并返回true。抱歉-我的浏览器欺骗我发送未完成的内容,因此我编辑了。。。这应该有用Barmar同时也发了类似的邮件我看了你的个人资料。你的正则表达式回答得很彻底。谢谢你从头到脚的介绍图案匹配,我很感谢你的努力。谢谢你的好话。我真的很喜欢接受这些挑战并使它们易于理解:)请使用+
而不是{1,}
+
和{1,}
在功能上是相同的,但是如果您以后决定要匹配至少两种东西,{1,}
更容易找到和修改,或者最多X个。您使用什么应用程序生成图形?
print_r(preg_match("/^[A-Za-z\-]+$/", $str));
<?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
)
)