Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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_Sql_Regex - Fatal编程技术网

Php 允许在用户名的开头和结尾使用下划线

Php 允许在用户名的开头和结尾使用下划线,php,sql,regex,Php,Sql,Regex,希望了解如何编辑用户名创建过程以允许在用户名的开头和结尾使用下划线和连字符 目前,如果您的用户名以\结尾,它会将其从创建过程中删除 $regex = '/^[A-Za-z0-9]+[A-Za-z0-9_.]*[A-Za-z0-9]+$/'; if(!preg_match($regex, $_POST['username'])) { $_SESSION['error'][] = $language->register->error_message->usernam

希望了解如何编辑用户名创建过程以允许在用户名的开头和结尾使用下划线和连字符

目前,如果您的用户名以\结尾,它会将其从创建过程中删除

$regex = '/^[A-Za-z0-9]+[A-Za-z0-9_.]*[A-Za-z0-9]+$/';
if(!preg_match($regex, $_POST['username'])) {
        $_SESSION['error'][] = $language->register->error_message->username_characters;
    }

您只需在第一个和最后一个字符集中添加下划线和连字符,就可以让用户名以这两个新字符开头或结尾,并像这样编写正则表达式

^[A-Za-z0-9_-]+[A-Za-z0-9_.]*[A-Za-z0-9_-]+$
由于\w与写入[a-zA-Z0-9_uz]相同,因此可以将正则表达式压缩为

^[\w-]+[\w.]*[\w-]+$
^[\w-]+([\w.]*[\w-]+)?$
还想提一点,每当您在字符集中编写连字符时,请确保始终将其作为字符集中的第一个或最后一个字符放置,否则在不知不觉中,连字符可能充当范围说明符,也可能不充当文字连字符。尽管在上面的正则表达式中,字符集中只有\w和-,因此我们不需要担心连字符的位置

另外,我不确定您是否希望允许用户名不同于变量名,变量名通常只允许一个字符中的一个字符,但是如果您希望,那么您可以将正则表达式修改为

^[\w-]+[\w.]*[\w-]+$
^[\w-]+([\w.]*[\w-]+)?$

您可以将[A-Za-z0-9]零件替换为[A-Za-z0-9\]或\w,但也可以尝试“/^\w:[\w.]*\w?$/”谢谢您的回复将[A-Za-z0-9_]置于第一和第三位置是否有效?老实说,我并不完全熟悉这一行代码的实际操作顺序那么反过来,第一行应该是这样的$正则表达式='/^[A-Za-z0-9.]+[A-Za-z0-9.]*[A-Za-z0-9.]+$/';关键是正则表达式要求字符串至少有2个字符。我想1个字符字符串也应该是有效的,不是吗?所以最终结果应该是这样的:$regex='/^[\w-]+[\w.]*[\w-]+$/';-想确定我是否需要斜线吗?@LoboStylez:是的,没错。在PHP中,你用引号写正则表达式,在引号之后和引号之前,你需要写一个正则表达式分隔符,因此你也需要写/但是如果你愿意,你可以把这些分隔符改成其他类似或~的东西,但是你至少需要写一些分隔符。通常,您希望选择一个不出现在正则表达式中的分隔符,否则您需要对其进行转义,因此为了避免在正则表达式中无效地转义字符,明智的做法是选择一个不出现在正则表达式中的分隔符。