php preg_match 只有数字、字母和点
php preg_match only numbers, letters and dot
我已经搜索了 2 个小时了,还是没找到。
我需要评估帐户名称的输入。只能包含数字 (0-9
)、字母 (a-z
和 A-Z
) 和点 (.
).
其他一切都被禁止。所以,没有下划线(_
),加上(+
)等等。
有效帐户应如下所示,例如:
john.green
luci.mayer89
admin
我尝试了很多 preg_match/regex 示例,但我无法正常工作。每当我执行 echo preg_match(...)
时,我都会得到 1
作为 true
。
$accountname = "+_#luke123*";
echo preg_match("/[a-z0-9.]/i", $accountname);
//--> gives back 1 as true
此外,如果能控制账户名至少以2个字母或数字开头,以至少1个字母或数字结尾,那就太好了——但我离那个还差得很远。
您需要使用锚点和量词:
echo preg_match("/^[a-z0-9.]+$/i", $accountname);
您的字符串+_#luke123*
包含一个字母和一个数字,因此匹配。如果我们告诉引擎只匹配从开头 (^
) 到结尾 ($
) 的整个字符串,我们将确保它不会匹配。 +
确保我们不仅捕获 1 个字符,而且捕获所有字符。
看到this demo,现在没有匹配!
编辑:
由于您还需要检查这些条件:
string must start with 2 or more letters or numbers and end with 1 or
more letters or numbers
我可以建议这个 ^[a-z0-9]{2,}[a-z0-9.]*[a-z0-9]+$
正则表达式(必须与 i
选项一起使用)这意味着:
- 以 2 个或更多字母或数字开头
- 然后跟随任意数量的数字、字母或句点
- 并以 1 个或多个字母或数字结尾。
我已经搜索了 2 个小时了,还是没找到。
我需要评估帐户名称的输入。只能包含数字 (0-9
)、字母 (a-z
和 A-Z
) 和点 (.
).
其他一切都被禁止。所以,没有下划线(_
),加上(+
)等等。
有效帐户应如下所示,例如:
john.green
luci.mayer89
admin
我尝试了很多 preg_match/regex 示例,但我无法正常工作。每当我执行 echo preg_match(...)
时,我都会得到 1
作为 true
。
$accountname = "+_#luke123*";
echo preg_match("/[a-z0-9.]/i", $accountname);
//--> gives back 1 as true
此外,如果能控制账户名至少以2个字母或数字开头,以至少1个字母或数字结尾,那就太好了——但我离那个还差得很远。
您需要使用锚点和量词:
echo preg_match("/^[a-z0-9.]+$/i", $accountname);
您的字符串+_#luke123*
包含一个字母和一个数字,因此匹配。如果我们告诉引擎只匹配从开头 (^
) 到结尾 ($
) 的整个字符串,我们将确保它不会匹配。 +
确保我们不仅捕获 1 个字符,而且捕获所有字符。
看到this demo,现在没有匹配!
编辑: 由于您还需要检查这些条件:
string must start with 2 or more letters or numbers and end with 1 or more letters or numbers
我可以建议这个 ^[a-z0-9]{2,}[a-z0-9.]*[a-z0-9]+$
正则表达式(必须与 i
选项一起使用)这意味着:
- 以 2 个或更多字母或数字开头
- 然后跟随任意数量的数字、字母或句点
- 并以 1 个或多个字母或数字结尾。