PHP检查字符串之前或之后是否有多个空格

时间:2015-01-18 02:06:22

标签: php

在我的网站上,用户注册后,他们可以随时更改用户名。最小字符数为6,最大数量为25。

这里有一些用于检查长度和删除字符的编码:

$users_new_name = strip_tags($_POST['new_name']);
$new_name = preg_replace("/[^0-9a-zA-Z -]/", "", $users_new_name);
// Check Length
if (ctype_space($new_name)) {
$message = die('<span class="Fail">Error: Name Must Be At least 6 Characters Long!</i></span>');    
}
if(strlen($new_name) < 6) {
$message = die('<span class="Fail">Error: Name Must Be At least 6 Characters Long!</i></span>');
}
if(strlen($new_name) > 25) {
$message = die('<span class="Fail">Error: Name Can\'t Be More Than 25 Characters Long!</i></span>');
}

我遇到的问题是如果你输入5个空格然后输入一个字母或数字,那么新的名字就是那个字母或数字;或者如果您输入一个字母或数字,则输入5个空格。我怎么能防止这种情况发生?

以下是示例enter image description here

的屏幕截图

3 个答案:

答案 0 :(得分:1)

我不明白为什么标签会在POST中。

如果你改变,空格就成了一个问题:

$users_new_name = strip_tags($_POST['new_name']);

$users_new_name = trim(strip_tags($_POST['new_name']));

或理想情况下(不需要条带标签):

$users_new_name = trim($_POST['new_name']);

将RegEx表达式更改为/[^0-9a-zA-Z]/以消除空格和短划线。

答案 1 :(得分:1)

听起来你需要trim()来修剪用户名中的任何空格。见http://php.net/trim

ltrim()会修剪任何前导空格。 rtrim()将修剪字符串末尾的任何空格。

答案 2 :(得分:0)

这很简单,而且我以前在系统上必须处理这些事情。

如果您首先调用此preg_replace,则其余代码应该捕获它;

$name = preg_replace('~[\s]+~', '', $name);

这只是检查是否有空格或多个空格,然后用一个空格替换。

所以&#34;升&#34;将返回&#34;升&#34; - 最少5个字符。

在这周围使用trim()你应该让它工作到可接受的东西(取决于你接受的定义 - 在我的用例中工作)