Regex 字母、数字和-_
我在PHP中检查值是否为以下任意组合时遇到问题Regex 字母、数字和-_,regex,Regex,我在PHP中检查值是否为以下任意组合时遇到问题 字母(大写或小写) 数字(0-9) 下划线(41; 破折号(-) 点(.) 没有空间!或其他角色 举几个例子: 好:“screens123.css” 确定:“screen new file.css” OK:“screen_new.js” 不正常:“screen new file.css” 我想我需要一个正则表达式来实现这一点,因为当给定字符串中包含除上述字符以外的其他字符时,我需要抛出一个错误。您需要的模式类似于(): 说明: ^是线锚的
- 字母(大写或小写)
- 数字(0-9)
- 下划线(41;
- 破折号(-)
- 点(.)
- 没有空间!或其他角色
- 好:“screens123.css”
- 确定:“screen new file.css”
- OK:“screen_new.js”
- 不正常:“screen new file.css”
我想我需要一个正则表达式来实现这一点,因为当给定字符串中包含除上述字符以外的其他字符时,我需要抛出一个错误。您需要的模式类似于(): 说明:
是线锚的开始^
是线锚的末端$
是字符类定义[…]
是“零或更多”重复*
-
是字符类定义中的最后一个字符,否则它具有不同的含义(即范围)。
在字符类定义之外也有不同的含义,但在内部,它只是一个文本
工具书类
- ,及
在PHP中 下面是一个片段,演示如何使用此模式:
<?php
$arr = array(
'screen123.css',
'screen-new-file.css',
'screen_new.js',
'screen new file.css'
);
foreach ($arr as $s) {
if (preg_match('/^[\w.-]*$/', $s)) {
print "$s is a match\n";
} else {
print "$s is NO match!!!\n";
};
}
?>
请注意,模式略有不同,而是使用\w
。这是“word character”的字符类
API参考
关于规格的说明 这似乎符合您的规范,但请注意,这将与
…
等匹配,这可能是您想要的,也可能不是您想要的。如果您可以更具体地指定要匹配的模式,则正则表达式将稍微复杂一些
上面的正则表达式也与空字符串匹配。如果至少需要一个字符,请使用+
(一个或多个)而不是*
(零个或多个)进行重复
在任何情况下,您都可以进一步澄清您的规范(在询问regex问题时总是有帮助的),但希望您也可以根据上述信息自己学习如何编写模式。您可以使用
^[\w.-]+$
+
用于确保它至少有一个字符。需要<代码> ^ < /代码>和<代码> $>代码>来表示开始和结束,否则如果字符串在中间有匹配,例如<代码> @ @ @ XYZ %%%%/代码>,那么它仍然是一个匹配项。
\w
已经包括字母(大写和小写)、数字和下划线。所以剩下的
,-
,只是放在“类”中进行匹配。+
表示出现一次或多次
另外,感谢评论中的注释
[A-Za-z0-9.-]*
如果您不想将最后一个
*
交换为+
之类的东西,那么这也将匹配空字符串
$code = "screen new file.css";
if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code))
{
echo "not valid";
}
这将回显“无效”以实际覆盖您的模式,即,根据您的规则,有效的文件名,我认为您需要更多。注意,从系统角度来看,这与合法文件名不匹配。这将依赖于系统,在它所接受的方面更加自由。这是为了匹配您可接受的模式
^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
说明:
匹配字符串的开头。这(加上结束匹配)强制字符串符合精确表达式,而不仅仅包含与表达式匹配的子字符串^
一个或多个字母或数字后跟下划线或破折号的出现次数为零或多个。这会导致所有包含破折号或下划线的名称之间都有字母或数字([a-zA-Z0-9]+[-])*
一个或多个字母或数字。这包括所有不包含下划线或破折号的名称[a-zA-Z0-9]+
文字句点(点)。强制文件名具有扩展名,并且通过从模式的其余部分排除,只允许在名称和扩展名之间使用句点。如果您希望使用与破折号/下划线相同的技术处理多个扩展名,请在结尾处进行处理\。
一个或多个字母或数字。扩展名必须至少有一个字符长,并且只能包含字母和数字。这是典型的,但是如果您想要允许下划线,也可以解决这个问题。您还可以提供一个长度范围[a-zA-Z0-9]+
,而不是一个或多个{2,3}
匹配器,如果这更合适的话+
匹配字符串的结尾。请参见起始字符$
- 这是您正在寻找的模式
/^[\w-_.]*$/
这意味着什么:
字符串的开头^
匹配内部字符[…]
任何单词字符,因此\w
0-9
a-z
a-z
匹配-.
和-
和-
零个或多个模式或无限制*
字符串结尾$
/^[\w-_.]{0,5}$/
/^[\w-_.]{0,5}$/
{0,5}
表示0-5
字符
/^[\w-_.]*$/
这意味着什么:
- ^字符串开头
- [……]匹配内部字符
- \w任意单词字符,所以0-9 a-z a-z
- -_。由charecter和uu和匹配
- 零个或多个模式或无限
$字符串结尾
如果要限制字符数,请执行以下操作:
/^[\w-_.]{0,5}$/
{0,5}表示0-5个数字和字符/^[\w-_.]{0,5}$/
-
放在集合的第一位,以避免定义范围。而\w
包括字母数字和下划线。所以你需要[\w.-]+
。谢谢,这对我来说很好:^[\w\d.-]+\.(csv | csv)$这也符合Go(golang)的空原始字符串文本,而接受的答案不符合要求,所以用户坚持使用此解决方案。见