Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用preg_match检查字符串是否仅包含a-Z、a-Z和-(破折号)字符_Php_Regex - Fatal编程技术网

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
        )

)