我对正则表达式了解不多,而且我尝试创建用户名字符串只接受英文字母和数字,只接受一个点。
我有这个正则表达式代码:
if(preg_match('/[^A-Za-z0-9]/', $username)){
$error = "Invalid Username";
}
此代码允许我只有英文字母和数字,我想在此代码中添加点,并且只接受一个点。
答案 0 :(得分:2)
只有一个点,但字符串中的任何位置?我做了第二次检查:
if(preg_match('/[^A-Za-z0-9\.]/', $username) || substr_count($username, '.') > 1){
$error = "Invalid Username";
}
答案 1 :(得分:1)
您需要应用前瞻断言才能确认它:
if (preg_match('/^(?!(?>[^.]*\.){2})[A-Za-z0-9\.]+$/', $username)) {
// username accepted
}
答案 2 :(得分:0)
MySQL
方法:
preg_match
答案 3 :(得分:0)
您可以使用
if (!preg_match('~^[A-Z0-9]*(?:\.[A-Z0-9]*)?$~i', $username))
{
$error = "Invalid Username";
}
请参阅PHP demo和regex demo。 [A-Z0-9]
可以替换为[[:alnum:]]
以匹配字母或数字。
<强>详情
^
- 字符串开头[A-Z0-9]*
- 0个或多个字母或数字(?:
- 启动可选的非捕获组
\.
- 一个点[A-Z0-9]*
- 0个或多个字母或数字)?
- 可选组的结尾$
- 字符串结束。答案 4 :(得分:0)
通过在可选点周围重复图案,可以很容易地处理这种情况。
`^[A-Za-z0-9]*\.?[A-Za-z0-9]*$`
用php包装
if (!preg_match('`^[A-Za-z0-9]*\.?[A-Za-z0-9]*$`', $username)) {
$error = "Invalid username";
}