说实话,我真的不得到正则表达式.所以我完全忘记了我在这里出错的地方.
我正在寻找一个只接受字母数字字符的RegEx (和下划线,它是用户名).我在这里搜索过,发现了很多我尝试过的RegExes示例,其中没有一个有效.
其中,我大多从这里得到的答案,我已经尝试过了
^[a-zA-Z0-9_]*$
/[^a-z_\-0-9]/i
/^\w+$/
Run Code Online (Sandbox Code Playgroud)
为了匹配这些,我尝试过(每个正则表达式)
if(preg_match("/^\w+$/", $username)) {
//don't accept
}
Run Code Online (Sandbox Code Playgroud)
和
if(!preg_match("/^\w+$/", $username)) {
//don't accept
}
Run Code Online (Sandbox Code Playgroud)
和
if(preg_match("/^\w+$/", $username) == 1) {
//don't accept
}
Run Code Online (Sandbox Code Playgroud)
和
if(preg_match("/^\w+$/", $username) == 0) {
//don't accept
}
Run Code Online (Sandbox Code Playgroud)
等等......每次都接受特殊字符(我试过&,$,^和%).
我到底错在了什么?它是RegEx的格式吗?这是我要求检查的方式吗?
另外,如果找到特殊字符,我得到的返回类型究竟是什么?(即,一个我不希望接受)
preg_match 如果输入字符串与您给出的模式匹配则返回1,如果不匹配,则返回0.
您希望用户名中的每个字符都是字母数字(加上下划线).表达方式的一种PCRE方式是使用方括号内的字符类,如下所示:[A-Za-z0-9_].有几种方法可以使用这个基本类来做你想要的.
一种方法是"否定"搜索:尝试匹配非字母数字字符,如果这样做,则测试失败.为此,我们只需在角色类的前面添加一个克拉.这意味着我们匹配不在该集合中的任何字符.
因此,以下模式匹配"任何非字母数字,非下划线字符".在这里,匹配意味着无效的用户名:
if (preg_match('/[^A-Za-z0-9_]/', $username)) {
// invalid username
}
Run Code Online (Sandbox Code Playgroud)
或者,你可以做相反的匹配,在那里你给出一个有效用户名的模式,并检查你是否匹配.这一次,我们根本不更改字符类本身,但我们+在它之后添加了量词,这意味着我们匹配一个或多个 "好"字符.
另外,我们在我们的模式周围包装^和$开始和结束字符串锚点.(这有点令人困惑,但是一个模式开头的克拉与一个字符类开头的克拉完全不同,在括号内).
最终结果是一个模式,意思是:"一个或多个字母数字字符(加下划线),没有别的." 这一个匹配意味着有效的用户名:
if (preg_match('/^[A-Za-z0-9_]+$/', $username)) {
// valid username
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |