Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,正则表达式-如何禁止非字母数字字符_Php_Regex - Fatal编程技术网

PHP,正则表达式-如何禁止非字母数字字符

PHP,正则表达式-如何禁止非字母数字字符,php,regex,Php,Regex,我正在尝试制作一个正则表达式,它允许输入至少一个数字和至少一个字母(不管是大写还是小写),而不允许其他内容。以下是我的想法: <?php if (preg_match('/(?=.*[a-z]+)(?=.*[0-9]+)([^\W])/i',$code)) { echo "=)"; } else { echo "=("; } ?> 如果我只使用数字或字母,它会给出false,如果我添加$or#或任何其他非字母数字符号,它会给出true。现

我正在尝试制作一个正则表达式,它允许输入至少一个数字和至少一个字母(不管是大写还是小写),而不允许其他内容。以下是我的想法:

<?php
    if (preg_match('/(?=.*[a-z]+)(?=.*[0-9]+)([^\W])/i',$code)) {
    echo "=)";
    } else {
    echo "=(";
    }
?>


如果我只使用数字或字母,它会给出false,如果我添加$or#或任何其他非字母数字符号,它会给出true。现在,我尝试用a-z和0-9将^\W放在类括号中,尝试使用类似于?=.[^\W]或?>!但我就是不能让它工作。在非字母中键入仍然会导致true。Halp meeee

您需要使用锚点,以便它与整个字符串匹配

^(?=.*[a-z]+)(?=.*[0-9]+)(\w+)$

既然您使用的是php,为什么还要使用正则表达式呢。您可以使用
ctype\u alnum()


什么是“没有别的”呢?“任何输入如果包含一个数字和一个字母都是好的”这是什么意思?您的正则表达式永远不会匹配,因为lookaheads需要两个字符,而表达式只匹配一个字符。另外,
[^\W]
\W
相同,因此只需使用它即可。这里有一个有效的例子:-除此之外,你对锚的看法是正确的。锚…现在看起来很明显。非常感谢你,我的朋友,现在一切都好了!