如何使用preg_match不允许前面和后面的空间,但允许介于两者之间

时间:2013-08-01 23:56:43

标签: php preg-match

我环顾四周,发现了很多教程。但在我的情况下,他们都没有帮助。 这是我的剧本:

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

此代码不允许任何空格,无论它们位于前面,末端还是中间。

我想允许在前面但不在前面和后面。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分: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功能。

答案 1 :(得分:2)

使用trim来省略文本左侧和右侧的空格。

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

//your code...
?>

答案 2 :(得分: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!@#$%]+)?+)?+$/