我正在尝试在 PHP 中做正则表达式,但我一直被窃听。我想要它,所以它是 AZ、0-9 和下划线 (_),但下划线不能用于文本的边缘。只在里面。
这是我所拥有的:
if (!ereg("^[a-zA-Z0-9_]{3,16}$",$username)) {
// Does not match
}else{
// Good job, within rules!
}
我正在尝试在 PHP 中做正则表达式,但我一直被窃听。我想要它,所以它是 AZ、0-9 和下划线 (_),但下划线不能用于文本的边缘。只在里面。
这是我所拥有的:
if (!ereg("^[a-zA-Z0-9_]{3,16}$",$username)) {
// Does not match
}else{
// Good job, within rules!
}
我不确定这是否是最好的方法,但它应该有效:
^[a-zA-Z0-9][a-zA-Z0-9_]{1,14}[a-zA-Z0-9]$
我减少了你的界限,2
因为你在字符串的开头/结尾占了两个字符。
首先,ereg
已弃用。改为使用preg_match
。
其次,您要匹配至少三个字符但不超过 16 个字符的任何字母、数字和下划线字符串,只要它不以下划线开头或结尾。@Blender 的解决方案将起作用。但是,一旦您使用preg_match
,因此使用 PCRE,您就可以访问让您更紧凑地执行此操作的功能:用于处理前导或尾随下划线的环视断言,以及\w
已经为您预定义为字母、数字和下划线:
if (!preg_match('/^(?!_)\w{3,16}(?<!_)$/', $username)) {
// Does not match
} else {
// Good job, within rules!
}