php preg_match只有数字,字母和点

时间:2015-04-26 18:36:40

标签: php regex preg-match

我现在已经搜索了2个小时,但我仍然没有得到它。 我需要评估帐户名称的输入。这只能包含数字(0-9),字母(a-zA-Z)和点(.)。

其他一切都是被禁止的。所以,没有下划线(_),加上(+)等等。

有效帐户应如下所示:

john.green
luci.mayer89
admin

我尝试过很多preg_match / regex示例,但我没有让它工作。每当我echo preg_match(...) 1时,我true$accountname = "+_#luke123*"; echo preg_match("/[a-z0-9.]/i", $accountname); //--> gives back 1 as true

/**/
object _layout extends BaseScalaTemplate[play.twirl.api.HtmlFormat.Appendable,Format[play.twirl.api.HtmlFormat.Appendable]](play.twirl.api.HtmlFormat) with play.twirl.api.Template1[String,play.twirl.api.HtmlFormat.Appendable] {

  /**/
  def apply/*1.2*/(title: String):play.twirl.api.HtmlFormat.Appendable = {
      _display_ {

此外,控制帐户名称以至少2个字母或数字开头并以至少1个字母或数字结尾会很棒 - 但我远远不够。

1 个答案:

答案 0 :(得分:6)

您需要使用锚点和量词:

echo preg_match("/^[a-z0-9.]+$/i", $accountname);

您的字符串+_#luke123*包含一个字母和一个数字,因此匹配。如果我们告诉引擎只匹配从开头(^)到结束($)的整个字符串,我们将确保它不匹配。 +确保我们不仅捕获1个,而且捕获所有字符。

请参阅this demo,现在没有匹配!

修改: 由于您还需要检查以下条件:

  

字符串必须以2个或更多字母或数字开头,以1或结尾   更多字母或数字

我可以建议这个^[a-z0-9]{2,}[a-z0-9.]*[a-z0-9]+$正则表达式(必须与i选项一起使用),这意味着:

  • 以2个或更多字母或数字开头
  • 然后按照任意数量的数字,字母或句号
  • 以1个或多个字母或数字结尾。

Another demo