输入用户名时防止双倍空间

When users register to my website I want to allow them to use spaces in their username, but only one space per word.

My current code:

$usor = $_POST['usernameone'];
$allowed = "/[^a-z0-9 ]/i";
$username = preg_replace($allowed,"",$usor);
$firstlettercheck = $username[0];
$lastlettercheck = substr("$username", -1);

if ($firstlettercheck == " " or $lastlettercheck == " ")
{
echo "Usernames can not contain a space at start/end of username."; 
}

What do I need to add to ensure there is only one space entered inebtween words of the username?

展开翻译

译文

当用户注册我的网站时,我想允许他们在用户名中使用空格,但每个单词只能使用一个空格 。</ p>

我当前的代码:</ p>

  $ usor = $ _POST ['usernameone']; 
$ allowed =“/ [^ a-z0-9] / i“;
$ username = preg_replace($ allowed,”“,$ usor);
$ firstlettercheck = $ username [0];
$ lastlettercheck = substr(”$ username“, -1);

if($ firstlettercheck ==“”或$ lastlettercheck ==“”)
{
echo“用户名不能在用户名的开头/结尾包含空格。”;

}
</ code> </ pre>

我需要添加什么才能确保在用户名的单词之间只输入一个空格?</ p>
</ div>

duanmao1975
duanmao1975 您应该在警告用户和执行自动更正之间进行选择。
6 年多之前 回复

2个回答

You can use a regex of (^\s+|\s{2,}|\s+$) to validate using preg_match:

if (preg_match('/(^\s+|\s{2,}|\s+$)/', $username)) {
    echo "Usernames can not contain a space at start/end of username and can't contain double spacing."; 
}

REGEX DEMO

Autopsy:

  • (^\s+|\s{2,}|\s+$):
    • ^\s+ matches 1 or more white-space characters (space/tab/newline) in the start of the string
    • | OR:
    • \s{2,} matches 2 or more white-space characters (space/tab/newline) anywhere in the string
    • | OR:
    • \s+$ matches 1 or more white-space characters (space/tab/newline) in the end of the string

If you wish to test them separately instead:

if (preg_match('/(^\s+|\s+$)/', $username)) {
    echo 'Usernames can not contain a space at start/end of username.'; 
} else if (preg_match('/\s{2,}/', $username)) {
    echo 'Usernames can not contain double spacing.';
}

展开翻译

译文



你可以使用的正则表达式(^ \ s + | \ s {2,} | \ s + $)</ code >使用 preg_match </ code> 进行验证:</ p>

  if(preg_match('/(^ \ s + | \ s {2,} | \ s + $)/',$ username)){
echo“用户名不能包含用户名开头/结尾的空格 并且不能包含双倍间距。“;

}
</ code> </ pre>

REGEX DEMO </ 强> </ p>

<强>尸检</强>:</ p>


  • <代码>(^ \ S + | \ s {2,} | \ s + $)</ code>:

    • ^ \ s + </ code> 匹配1个或多个空白字符(空格/ 字符串开头的</ em> </ li>
    • | </ code> OR:</ em> </ li>
    • < 代码> \ s {2,} </ code> 匹配字符串中任意位置的两个或多个空格字符(空格/制表符/换行符)</ em> </ li>
    • | </ code> 或:</ em> </ li>
    • \ s + $ </ code> 匹配1个或多个空白字符(空格/制表符/换行符) )在字符串的末尾</ em> </ li>
      </ ul> </ li>
      </ ul>

      如果你想分别测试它们:</ p >

        if(preg_match('/(^ \ s + | \ s + $)/',$ username)){
      echo'用户名不能包含用户名开头/结尾的空格 ';

      }否则if(preg_match('/ \ s {2,} /',$ username)){
      echo'Usernames不能包含双倍行距。';
      }
      </ code> </ pre>

      </ div>

dongshi9719
dongshi9719 非常好,工作得很好,谢谢你。
6 年多之前 回复
douxi7219
douxi7219 我为你加了尸检。 :-)
6 年多之前 回复
dongtuliao6760
dongtuliao6760 too long
6 年多之前 回复
dqoeghe9452
dqoeghe9452 正则表达式做到了这一点。 如果您愿意,请查看演示。 他从不提及剥离,而是提出错误。
6 年多之前 回复

Use the following:

$username = preg_replace('/[\s]+', " ", $usor);

That will replace multiple spaces with a single space.

展开翻译

译文



使用以下内容:</ p>

  $ username = preg_replace('/ [\ s  ] +',“”,$ usor); 
</ code> </ pre>

这将用一个空格替换多个空格。</ p>
</ div>

duanche4578
duanche4578 但这就是OP所要求的
6 年多之前 回复
dporu02280
dporu02280 too long
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐