PHP预匹配模式问题
我正在努力使这个模式正确运行,但我就是无法使它正常运行。基本上,我想验证一个只能接受字母、数字和以下字符的字符串:PHP预匹配模式问题,php,regex,preg-match,Php,Regex,Preg Match,我正在努力使这个模式正确运行,但我就是无法使它正常运行。基本上,我想验证一个只能接受字母、数字和以下字符的字符串:@!?\u;:- 以下是我到目前为止的源代码: <?php $test_string = '1234bcd@!?_;:-,.'; echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string ); ?> 您正试图打印一个整数,但它无法实现您的目标。试试这个: if( preg_match( "/^[a-
@!?\u;:-代码>
以下是我到目前为止的源代码:
<?php
$test_string = '1234bcd@!?_;:-,.';
echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string );
?>
您正试图打印一个整数,但它无法实现您的目标。试试这个:
if( preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string )) {
echo 'valid string!';
} else {
echo 'invalid!';
}
请注意,您的正则表达式认为字符串是有效的,如果它们是:
- 长度在4到12个字符之间
- 仅由字母、数字和包含的其他字符组成
还要注意,输入字符串被认为是无效的,不仅因为它太长,而且因为它包含一个破折号,而正则表达式不支持破折号:
1234bcd@!?_;:-,.
^
No match
要将其包含在正则表达式中,请将其放置在正则表达式中字符类的末尾:
preg_match( "/^[a-z0-9@!?_;:,.-]{4,12}$/i", $test_string )
^
某些字符由regexp保留,例如?等
使用反斜杠
if( preg_match( "/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i", $test_string )) {
...
}
这种模式适用于:
$test_string = '1234bcd@!?_;:-,.';
if(preg_match('/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i', $test_string))
{
echo 'Valid';
}
但是在这种情况下,1234bcd@?:-代码>,因为输入字符串长度为16(长度不在4到12个字符之间),所以不会更改
顺便说一下,总是转义元字符。您将找到完整的列表。问题是?顺便说一句,这两行的结果将是0
,因为您的$test_string
太长:只有当被测字符串的长度在4到12之间时,模式才会匹配。不知何故,我认为问题不是用更有意义的内容替换0和1。当然,我可能错了。)这就是我对这个问题的解释:)虽然有点模糊,但谁知道呢!逃避现实class@Macino-不,你不需要,它在角色类的末尾(出于某种原因)。当它们在角色类中时,情况并非如此。为什么?和。是的,但不适用于-。在任何地方逃避这些都是一个好习惯(但正如你所提到的,除非它们是\^-])。看看