1

我有一个 reg exp 应该检查名称中是否有任何非法字符。允许的字符为 0-9、az、AZ、中线 (-) 和下划线 (_)。

这是功能

function validate_playername($playername){
    if (preg_match('/^[0-9A-Z-_]$/i',$playername)) {
        return true;
    } else{
        return false;
    }

}

该函数是这样调用的

if (validate_playername($addplayer)) {
    echo "valid player Name";
} else {
    echo "Invalid Player Name";
}

但是,当我输入像 velocity28 这样的正确名称时,它会作为无效的玩家名称返回。我的 reg exp 错了吗?

4

2 回答 2

5

/^[0-9A-Z-_]$/i只匹配一个字符。

追加+以匹配多个字符:

'/^[-0-9A-Z_]+$/i'
  • 移到-开头。

更新

正如 Enissay 评论的那样,可以使用以下方法简化正则表达式\w

'/^[-\w]+$/'
于 2013-08-21T13:40:06.547 回答
0

要在字符类中使用文字减号,必须使用反斜杠对其进行转义:

   function validate_playername($playername){
    if (preg_match('/^[0-9A-Z\-_]$/i',$playername)) {
        return true;
    } else{
        return false;
    }

   }

有关详细信息,请参阅http://php.net/manual/de/regexp.reference.character-classes.php

您还可以将减号移动到它不能成为字符范围定义的一部分的位置,例如,使其成为字符类中的第一个字符。

于 2013-08-21T13:43:26.243 回答