我环顾四周,发现了很多教程。但在我的情况下,他们都没有帮助。 这是我的剧本:
if(!preg_match('/^[0-9A-Za-z!@#$%]+$/',$user_name)) {
echo"bad username";
}
此代码不允许任何空格,无论它们位于前面,末端还是中间。
我想允许在前面但不在前面和后面。
任何人都可以帮助我吗?
答案 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!@#$%]+)?+)?+$/