我正在尝试在PHP中使用正则表达式,但我一直在窃听。我想要它所以它是A-Z,0-9和下划线(_)但是下划线不能用在文本的边缘。只在里面。
我有:
if (!ereg("^[a-zA-Z0-9_]{3,16}$",$username)) {
// Does not match
}else{
// Good job, within rules!
}
答案 0 :(得分:5)
我不确定这是否是最好的方法,但它应该有效:
^[a-zA-Z0-9][a-zA-Z0-9_]{1,14}[a-zA-Z0-9]$
我将你的界限减少了2
,因为你在字符串的开头/结尾处占了两个字符。
答案 1 :(得分: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!
}