当前位置: 首页 > 知识库问答 >
问题:

使用preg_match检查字母数字点破折号和下切的正则表达式是什么?

阚正真
2023-03-14

我正在检查用户输入的用户名

我试图使用preg_match()在PHP中验证用户名,但我似乎无法让它按照我想要的方式工作。我要求preg_match():

  • 只接受字母,数字和。-_

即字母数字点破折号和下划线,我尝试了来自htaccess的正则表达式,就像这样

([A-Za-z0-9.-_]+)

像这样,但它似乎不起作用,它给出了简单的alpha用户名的假。

$text = 'username';

if (preg_match('/^[A-Za-z0-9.-_]$/' , $text)) {
   echo 'true';   
} else {
   echo 'false';
}

我怎样才能让它工作?

我将在这样的功能中使用它

//check if username is valid
function isValidUsername($str) {
    return preg_match('/[^A-Za-z0-9.-_]/', $str);
}

我在preg_match()和用户名中尝试了answwer,但正则表达式中仍然有问题。

更新

我在函数内部使用了xdazz给出的代码,就像这样。

//check if username is valid
function isValidUsername($str) {
    if (preg_match('/^[A-Za-z0-9._-]+$/' , $str)) {
       return true;   
    } else {
       return false;
    }
}

检查它就像

$text = 'username._-546_546AAA';


if (isValidUsername($text) === true) {
echo 'good';
}
else{
echo 'bad';
}

共有3个答案

周翰池
2023-03-14

只需将<code>-

$text = 'username';

if (preg_match('/^[A-Za-z0-9._-]+$/' , $text)) {
   echo 'true';   
} else {
   echo 'false';
}
郭兴文
2023-03-14

连字符-在用于范围的[…],具有特殊含义。

它应该在开始或者在最后或者像< code>([A-Za-z0-9。_-] )否则它将匹配< code >之间的所有字符。ASCII字符集中的和< code>_。

阅读类似的文章包括连字符在一个正则表达式字符括号?

最好使用与 [A-Za-z0-9_] 匹配的 \w。在较短的形式中使用 [\w.-]

上一个正则表达式模式的含义是什么?

此处 [^..] 用于否定字符集。如果你在 ^[...] 之外使用它,那么它表示行/字符串的开头。

[^A-Za-z0-9.-_]          any character except: 
                         'A' to 'Z', 
                         'a' to 'z', 
                         '0' to '9',
                         '.' to '_'
勾通
2023-03-14

您遗漏了< code> ( 表示一个或多个字符,< code>*表示零个或多个字符),或者您的正则表达式只匹配一个带有一个字符的字符串

if (preg_match('/^[A-Za-z0-9._-]+$/' , $text)) {
   echo 'true';   
} else {
   echo 'false';
}
 类似资料:
  • 我正在尝试构建一个正则表达式来验证用户名,该用户名将包含字母数字字符,并且应该允许<代码>(dot)(撇号)和-(破折号),我尝试了以下正则表达式,但它们不起作用 <代码>/^[a-zA-Z0-9\.-]$/<代码> 请帮帮忙

  • 所有: 我想做的是使用正则表达式匹配一个只允许[a-Za-z0-9_-]的字符串,格式应该是: 仅从[A-Za-z0-9]开始,然后是[A-Za-z0-9_-]。中间可能有[_-],但如果有,则只允许一次(两个_-,但每个都只有一次机会),并以[A-Za-z0-9]结束。 我只知道如何匹配字母数字字符、破折号和下划线,但不知道如何限制它们的出现时间。 谢谢

  • 我对正则表达式很陌生。我需要构造一个正则表达式,如果在下面的代码中使用,它将生成一个只有字母(大小写)、数字、、、和。 以下表达式不起作用:。它替换了一些字母,而不是所有不需要的字符。为什么它不起作用?

  • 我想做一个正则表达式来匹配这些字符串之一:、、、。 我的正则表达式只能接受以下字符串(而不是其他单词): 这是我当前的正则表达式,但它不能按预期工作: 编辑 如果在我的字符串中它们是: 如果它们是其他单词或符号,则返回 false。 谢谢大家。

  • 问题内容: 我正在使用正则表达式来验证字符串中的特定格式。该字符串将成为游戏规则。 示例:根据规则,“ DX 3”也可以,但是“ DX 14”也可以。。。我知道如何查看字符串并找到一个或多个“数字”,因此问题在于正则表达式将也匹配34,这个数字超出了规则的“范围” … 我是否缺少有关正则表达式的功能?还是根本不可能? 问题答案: 不幸的是,没有简单的方法可以在正则表达式中定义范围。如果要使用范围1