PHP表达困境

时间:2012-05-19 04:59:49

标签: php

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

我有:

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

2 个答案:

答案 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!
}