PHP正则表达式只接受字母和数字,只接受一个点

时间:2017-12-02 17:38:52

标签: php regex

我对正则表达式了解不多,而且我尝试创建用户名字符串只接受英文字母和数字,只接受一个点。

我有这个正则表达式代码:

if(preg_match('/[^A-Za-z0-9]/', $username)){
    $error = "Invalid Username";
}

此代码允许我只有英文字母和数字,我想在此代码中添加点,并且只接受一个点。

5 个答案:

答案 0 :(得分:2)

只有一个点,但字符串中的任何位置?我做了第二次检查:

if(preg_match('/[^A-Za-z0-9\.]/', $username) || substr_count($username, '.') > 1){
    $error = "Invalid Username";
}

答案 1 :(得分:1)

您需要应用前瞻断言才能确认它:

if (preg_match('/^(?!(?>[^.]*\.){2})[A-Za-z0-9\.]+$/', $username)) {
    // username accepted
}

答案 2 :(得分:0)

MySQL方法:

preg_match

答案 3 :(得分:0)

您可以使用

if (!preg_match('~^[A-Z0-9]*(?:\.[A-Z0-9]*)?$~i', $username))
{
     $error = "Invalid Username";
}

请参阅PHP demoregex demo[A-Z0-9]可以替换为[[:alnum:]]以匹配字母或数字。

<强>详情

  • ^ - 字符串开头
  • [A-Z0-9]* - 0个或多个字母或数字
  • (?: - 启动可选的非捕获组
    • \. - 一个点
    • [A-Z0-9]* - 0个或多个字母或数字
  • )? - 可选组的结尾
  • $ - 字符串结束。

答案 4 :(得分:0)

通过在可选点周围重复图案,可以很容易地处理这种情况。

`^[A-Za-z0-9]*\.?[A-Za-z0-9]*$`

用php包装

if (!preg_match('`^[A-Za-z0-9]*\.?[A-Za-z0-9]*$`', $username)) {
    $error = "Invalid username";
}