当我提交此表格时,我不断得到一个不应该做的比赛。我知道这与美元符号有关,但我无法解决这个问题,而且我似乎无法在Google上找到合适的答案。
<?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>
答案 0 :(得分:3)
应该是
preg_match('/^[a-z0-9\-]+$/i', $u)
答案 1 :(得分:2)
您必须匹配字符串的开头和结尾,否则它将与匹配的子字符串一起传递:
preg_match('/^[a-z0-9\-]+$/i', $u);
答案 2 :(得分:2)
你的preg_match正在寻找匹配因为'1'是匹配,'2'是匹配,'abc213'是匹配,'a'是匹配等等。你想确定整个字符串匹配吗?然后尝试这种模式:
preg_match("/^[a-z0-9\-]+$/i", $u);
将表达式包装在^ .. $中意味着它必须以该序列开始和结束。这将不匹配,除非字符串中的所有字符都与此模式匹配,如果字符串中的任何“字符序列”与模式匹配,则您的匹配将匹配。