Php 正则表达式不允许使用双下划线
我正在写我的网站用户注册部分,我有一个简单的正则表达式,如下所示:Php 正则表达式不允许使用双下划线,php,regex,Php,Regex,我正在写我的网站用户注册部分,我有一个简单的正则表达式,如下所示: if(preg_match("/^[a-z0-9_]{3,15}$/", $username)){ // OK... }else{ echo "error"; exit(); } 我不想让用户拥有像“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
if(preg_match("/^[a-z0-9_]{3,15}$/", $username)){
// OK...
}else{
echo "error";
exit();
}
我不想让用户拥有像“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
function replace_repeated_underScores($string){
$final_str = '';
$str_len = strlen($string);
$prev_char = '';
for($i = 0; $i < $str_len; $i++){
if($i > 1){
$prev_char = $string[$i - 1];
}
$this_char = $string[$i];
if($prev_char == '_' && $this_char == '_'){
}else{
$final_str .= $this_char;
}
}
return $final_str;
}
函数替换\u重复\u下划线($string){
$final_str='';
$str_len=strlen($string);
$prev_char='';
对于($i=0;$i<$str_len;$i++){
如果($i>1){
$prev_char=$string[$i-1];
}
$this_char=$string[$i];
如果($prev_char=='''''''&&$this_char==''''''''{
}否则{
$final_str.=$this_char;
}
}
返回$final_str;
}
它工作得很好,但我想知道我是否也可以用正则表达式而不是另一个函数来检查它
如果有任何帮助,我将不胜感激。只需添加负面展望,检查名称中是否有双下划线
/^(?!.*__)[a-z0-9_]{3,15}$/
(?!pattern)
,称为零宽度负前瞻,将检查是否无法在字符串中从“当前位置”(当前位置是正则表达式引擎所在的位置)的前面找到模式。它的宽度为零,因为它在过程中不使用文本,而不是外部的部分。这是负面的,因为只有在无法匹配模式的情况下匹配才会继续(所有可能性都已用尽)
模式是*\uuuuuu
,因此它只是意味着只有当它找不到*\uuuuu
的匹配项时,匹配才会继续,即字符串前面没有双下划线。由于该组不使用文本,因此当字符串开始匹配模式[a-z0-9}{3,15}$
的后面部分时,您仍将位于字符串的开头
您已经允许使用大写用户名strtolower
,但是,通过添加不区分大小写的标志i
,仍然可以直接使用正则表达式进行验证:
/^(?!.*__)[a-z0-9_]{3,15}$/i
只需添加负前瞻性检查名称中是否有双下划线
/^(?!.*__)[a-z0-9_]{3,15}$/
(?!pattern)
,称为零宽度负前瞻,将检查是否无法在字符串中从“当前位置”(当前位置是正则表达式引擎所在的位置)的前面找到模式。它的宽度为零,因为它在过程中不使用文本,而不是外部的部分。这是负面的,因为只有在无法匹配模式的情况下匹配才会继续(所有可能性都已用尽)
模式是*\uuuuuu
,因此它只是意味着只有当它找不到*\uuuuu
的匹配项时,匹配才会继续,即字符串前面没有双下划线。由于该组不使用文本,因此当字符串开始匹配模式[a-z0-9}{3,15}$
的后面部分时,您仍将位于字符串的开头
您已经允许使用大写用户名strtolower
,但是,通过添加不区分大小写的标志i
,仍然可以直接使用正则表达式进行验证:
/^(?!.*__)[a-z0-9_]{3,15}$/i
可以使用正则表达式进行检查。甚至可以使用正则表达式替换将多个下划线折叠为一个下划线,也可以使用正则表达式进行检查。甚至可以用正则表达式替换将多个下划线折叠为一个。请解释一下这个正则表达式好吗?我可以使用它,但我不能写它,因为我不明白到底发生了什么,提前谢谢你能解释一下这个正则表达式吗?我可以使用它,但我不能写它,因为我不明白到底发生了什么,提前谢谢