1

我正在尝试在 PHP 中做正则表达式,但我一直被窃听。我想要它,所以它是 AZ、0-9 和下划线 (_),但下划线不能用于文本的边缘。只在里面。

这是我所拥有的:

if (!ereg("^[a-zA-Z0-9_]{3,16}$",$username)) {
// Does not match
}else{
// Good job, within rules!
}
4

2 回答 2

5

我不确定这是否是最好的方法,但它应该有效:

^[a-zA-Z0-9][a-zA-Z0-9_]{1,14}[a-zA-Z0-9]$

我减少了你的界限,2因为你在字符串的开头/结尾占了两个字符。

于 2012-05-19T05:01:46.273 回答
0

首先,ereg已弃用。改为使用preg_match

其次,您要匹配至少三个字符但不超过 16 个字符的任何字母、数字和下划线字符串,只要它不以下划线开头或结尾。@Blender 的解决方案将起作用。但是,一旦您使用preg_match,因此使用 PCRE,您就可以访问让您更紧凑地执行此操作的功能:用于处理前导或尾随下划线的环视断言,以及\w已经为您预定义为字母、数字和下划线:

if (!preg_match('/^(?!_)\w{3,16}(?<!_)$/', $username)) {
    // Does not match
} else {
    // Good job, within rules!
}
于 2012-05-19T05:26:19.863 回答