php preg_match 只有数字、字母和点

php preg_match only numbers, letters and dot

我已经搜索了 2 个小时了,还是没找到。 我需要评估帐户名称的输入。只能包含数字 (0-9)、字母 (a-zA-Z) 和点 (.).

其他一切都被禁止。所以,没有下划线(_),加上(+)等等。

有效帐户应如下所示,例如:

john.green
luci.mayer89
admin

我尝试了很多 preg_match/regex 示例,但我无法正常工作。每当我执行 echo preg_match(...) 时,我都会得到 1 作为 true

$accountname = "+_#luke123*";
echo preg_match("/[a-z0-9.]/i", $accountname);

//--> gives back 1 as true

此外,如果能控制账户名至少以2个字母或数字开头,以至少1个字母或数字结尾,那就太好了——但我离那个还差得很远。

您需要使用锚点和量词:

echo preg_match("/^[a-z0-9.]+$/i", $accountname);

您的字符串+_#luke123*包含一个字母和一个数字,因此匹配。如果我们告诉引擎只匹配从开头 (^) 到结尾 ($) 的整个字符串,我们将确保它不会匹配。 + 确保我们不仅捕获 1 个字符,而且捕获所有字符。

看到this demo,现在没有匹配!

编辑: 由于您还需要检查这些条件:

string must start with 2 or more letters or numbers and end with 1 or more letters or numbers

我可以建议这个 ^[a-z0-9]{2,}[a-z0-9.]*[a-z0-9]+$ 正则表达式(必须与 i 选项一起使用)这意味着:

  • 以 2 个或更多字母或数字开头
  • 然后跟随任意数量的数字、字母或句点
  • 并以 1 个或多个字母或数字结尾。

Another demo