-2

当我提交此表格时,我不断得到一个不应该做的匹配。我知道这与美元符号有关,但我无法计算出组合,我似乎无法在谷歌上找到正确的答案。

<?php
if ( isset( $_POST['test'] ) ) {
    $u = $_POST['test'];
    echo preg_match('/[a-z0-9\-]+/i', $u);
}
?>

<form method="post">
    <input type="text" name="test" value="12$abc213">
    <button type="submit">Submit</button>
</form>
4

3 回答 3

3

应该

preg_match('/^[a-z0-9\-]+$/i', $u)
于 2013-03-23T19:04:21.320 回答
2

您必须匹配字符串的开头和结尾,否则它将与匹配的子字符串一起传递:

preg_match('/^[a-z0-9\-]+$/i', $u);
于 2013-03-23T19:04:30.900 回答
2

您的 preg_match 正在查找匹配项,因为 '1' 是一个匹配项,'2' 是一个匹配项,'abc213' 是一个匹配项,'a' 是一个匹配项,等等。你想确保整个字符串匹配吗?然后试试这个模式:

preg_match("/^[a-z0-9\-]+$/i", $u);

将表达式包装在 ^..$ 中意味着它必须以该序列开始和结束。除非字符串中的所有字符都与此模式匹配,否则这将不匹配,如果字符串中的任何“字符序列”与该模式匹配,您的字符将匹配。

于 2013-03-23T19:06:02.090 回答