简单 php preg_match 不适合我
Simple php preg_match not working for me
我用 Google 搜索并查看了很多关于这个主题的主题,但 none 为我回答了这个问题。我什至复制了几个不同的过滤器字符串来做我的简单验证。它们都在 www.functions-online.com/preg_match.htm 上工作,但其中 none 在我的 if() 语句中工作。
PHP 版本。 5.3.3
我的代码只允许字母数字和空格:
$myString = 'My Terrific Game';
if (!preg_match('/^[a-z0-9\s]+$/i', $myString)) { "$errorMessage }
我什至已将过滤器缩减为 '/^[a-z]+$/' 并将测试字符串缩减为 'mytarrificgame' 但它仍然 returns 为零。好像 preg_match() 根本不起作用。
有人有什么建议吗?
您需要更正的一些事项:
- 您在
"$errorMessage
中有未结束的引号。应该是 $errorMessage
或 "$errorMessage"
.
- 那里没有命令。如果要打印值,请使用
echo $errorMessage
.
- 是否在代码中的任何位置设置了该变量?
这应该有效
if (!preg_match('/^[a-z0-9\s]+$/i', $myString)) { echo $errorMessage; }
或者,如果您考虑一下,只匹配允许字符之外的 1 个字符就足够了。
代码:
$myString = 'My Terrific Game';
$errorMessage = 'ERROR: Unallowed character';
if (preg_match('/[^a-z0-9\s]/i', $myString)) {
echo $errorMessage;
} else {
echo 'Valid input';
}
我尝试了上面第一个答案的第二个示例中显示的过滤器字符串,它甚至在在线测试页面上都不起作用,但它确实给了我一个解决困境的新起点。当我将胡萝卜移到左括号之前时,它有点起作用但很脆。在尝试了不同的东西之后,我终于回到了原来的 '/^[a-z0-9\s]+$\i' 并且它开始工作时非常稳定。我认为它之前对我根本不起作用的原因是我期望对 preg-match() 表达式进行布尔测试以接受零为假。这可能是 php 版本 5.3.3 的东西。我尝试了以下方法;
if(preg-match('/^[a-z0-9\s]+$/i', $testString) === 0) { "Do Something" }
它正在运行。通过深入研究 preg-match() 描述,我发现如果发生错误,它只会 returns 一个布尔值 false。有效的不匹配 returns 零。
感谢所有看过这里并考虑过我的问题的人。
我用 Google 搜索并查看了很多关于这个主题的主题,但 none 为我回答了这个问题。我什至复制了几个不同的过滤器字符串来做我的简单验证。它们都在 www.functions-online.com/preg_match.htm 上工作,但其中 none 在我的 if() 语句中工作。
PHP 版本。 5.3.3 我的代码只允许字母数字和空格:
$myString = 'My Terrific Game';
if (!preg_match('/^[a-z0-9\s]+$/i', $myString)) { "$errorMessage }
我什至已将过滤器缩减为 '/^[a-z]+$/' 并将测试字符串缩减为 'mytarrificgame' 但它仍然 returns 为零。好像 preg_match() 根本不起作用。
有人有什么建议吗?
您需要更正的一些事项:
- 您在
"$errorMessage
中有未结束的引号。应该是$errorMessage
或"$errorMessage"
. - 那里没有命令。如果要打印值,请使用
echo $errorMessage
. - 是否在代码中的任何位置设置了该变量?
这应该有效
if (!preg_match('/^[a-z0-9\s]+$/i', $myString)) { echo $errorMessage; }
或者,如果您考虑一下,只匹配允许字符之外的 1 个字符就足够了。
代码:
$myString = 'My Terrific Game';
$errorMessage = 'ERROR: Unallowed character';
if (preg_match('/[^a-z0-9\s]/i', $myString)) {
echo $errorMessage;
} else {
echo 'Valid input';
}
我尝试了上面第一个答案的第二个示例中显示的过滤器字符串,它甚至在在线测试页面上都不起作用,但它确实给了我一个解决困境的新起点。当我将胡萝卜移到左括号之前时,它有点起作用但很脆。在尝试了不同的东西之后,我终于回到了原来的 '/^[a-z0-9\s]+$\i' 并且它开始工作时非常稳定。我认为它之前对我根本不起作用的原因是我期望对 preg-match() 表达式进行布尔测试以接受零为假。这可能是 php 版本 5.3.3 的东西。我尝试了以下方法;
if(preg-match('/^[a-z0-9\s]+$/i', $testString) === 0) { "Do Something" }
它正在运行。通过深入研究 preg-match() 描述,我发现如果发生错误,它只会 returns 一个布尔值 false。有效的不匹配 returns 零。
感谢所有看过这里并考虑过我的问题的人。