等价正则表达式

时间:2014-01-29 20:00:20

标签: regex codeigniter expression

我有这个正则表达式:

/^(?:'[A-z](([\._\-][A-z0-9])|[A-z0-9])*[a-z0-9_]*')$/

我正试图建立一个同等的,但仍然没有成功。

有关更多信息,它是用户名的正则表达式。这是规则:

  • 应以字母开头
  • 可以。 - 或_在用户名的中间(如john__,或john.m,或kate-7)
  • 无法结束。或 - ,但它可以以几个_(如matt __)
  • 结束
  • 可以以数字结尾(如chloe77)

修改

我正在使用Codeigniter regex_match并且它有一个错误,不接受管道。所以等效的正则表达式不应该有管道。

我将不胜感激任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

^(?:[a-zA-Z](?:[a-zA-Z0-9._-]*[a-zA-Z0-9_]+)?)$

http://regex101.com/r/jX2wY5

答案 1 :(得分:0)

假设您使用的是PCRE(或大多数)兼容语言,请尝试以下操作:

/^([A-Z][\w.-]*[A-Z_\d]|[A-Z])$/i

http://regex101.com/r/hS7mB9

在javascript中:

var str = "john.m"; //example
console.log((/^([A-Z][\w.-]*[A-Z_\d]|[A-Z])$/i).test(str));

在php中:

$str = "john.m"; //example
if (!preg_match("/^([A-Z][\w.-]*[A-Z_\d]|[A-Z])$/i", $str);

没有|

$str = ".John.m";
if (preg_match("/^[A-Z]$/i", $str))
{
    //check if it's one letter
}
else if (preg_match("/^[A-Z][\w.-]*[A-Z_\d]/i", $str))
{
    //if not, check if it fits the other format
}
else
{
    //we can assume that it's now failed the test
}