0

我环顾四周,发现那里有很多教程。但在我的情况下,它们都无济于事。这是我的脚本:

if(!preg_match('/^[0-9A-Za-z!@#$%]+$/',$user_name)) {
  echo"bad username";
} 

这段代码不允许任何空格,无论它们是在前面、结尾还是中间。

我只想在前面和结尾之间允许,但不允许在前面和结尾。

任何人都可以帮助我吗?

4

3 回答 3

3

你拥有的那一点

[0-9A-Za-z!@#$%]

匹配任何这些字符+意味着一个或多个。如果您想匹配这些或空格,只需在列表中添加一个空格,并在现有的之前和之后放置一个分组,如下所示:

/^[0-9A-Za-z!@#$%][0-9A-Za-z!@#$% ]+[0-9A-Za-z!@#$%]$/

这样做的副作用是用户名必须至少有 3 个字符长。如果您想允许较小的用户名,您可以拆分检查:

if(!preg_match('/^[0-9A-Za-z!@#$% ]+$/',$user_name) || preg_match('/^ /',$user_name) || preg_match('/ $/',$user_name)) {

确保!preg_match('/^[0-9A-Za-z!@#$% ]+$/',$user_name)用户名仅包含批准的字符,preg_match('/^ /',$user_name)检查它是否以空格开头,并preg_match('/ $/',$user_name)检查它是否以空格结尾。

如果您想接受输入的内容并自动删除任何前导或尾随空格,请使用该trim功能。

于 2013-08-02T00:09:29.763 回答
2

改用修剪来省略文本左侧和右侧的空格。

<?php
$username = trim($username);

//your code...
?>
于 2013-08-02T00:03:56.487 回答
0

你可以使用这个:

/^[0-9A-Za-z!@#$%]++(?>[0-9A-Za-z!@#$%\s]+[0-9A-Za-z!@#$%]+)?+$/

或者如果你想允许空字符串

/^(?>[0-9A-Za-z!@#$%]+(?>[0-9A-Za-z!@#$%\s]*[0-9A-Za-z!@#$%]+)?+)?+$/
于 2013-08-02T00:13:04.160 回答