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

时间:2014-02-26 17:26:01

标签: php string replace preg-replace space

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

我目前的代码:

$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."; 
}

我需要添加什么才能确保在用户名的字词之间只输入一个空格?

2 个答案:

答案 0 :(得分:1)

您可以使用(^\s+|\s{2,}|\s+$)的正则表达式来验证使用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

<强>尸检

  • (^\s+|\s{2,}|\s+$)
    • ^\s+ 在字符串的开头匹配1个或多个空白字符(空格/制表符/换行符)
    • | 或:
    • \s{2,} 在字符串中的任意位置匹配2个或更多空白字符(空格/制表符/换行符)
    • | 或:
    • \s+$ 在字符串末尾匹配1个或多个空白字符(空格/制表符/换行符)

如果您希望单独测试它们:

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.';
}

答案 1 :(得分:0)

使用以下内容:

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

这将用一个空格替换多个空格。