2012-06-12 29 views
5
<?php 

    $string = 'user34567'; 

      if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){ 
       echo 1; 
      } 

?> 

我要檢查字符串是否有字用戶遵循數字,可以是8個符號最大值。正則表達式

回答

10

你實際上是非常接近:

if(preg_match('/^user[0-9]{1,8}$/', $string)){ 

爲「必須在字符串的開始匹配」應該是在前面一路,其次是「用戶」錨文本;然後指定字符集[0-9]和乘數{1,8}。最後,你以「必須匹配字符串結尾」錨點結束。

您的原始表達幾點意見:

  1. ^字符串的開頭匹配,所以寫其他地方有這樣的表達裏,但一開始不會產生預期的結果
  2. +是乘數; {1,8}也是一個,但在表達式後只能使用一個乘數
  3. 除非您打算使用在表達式中找到的數字,否則不需要括號。

順便說一句,而不是[0-9]你也可以使用\d。它是縮短了正則表達式的自動字符組,雖然這尤其是一個不保存所有的字符太多;-)

2

你接近,這裏是你的正則表達式:/^user[0-9]{1,8}$/

1

試試下面的正則表達式來代替:

/^user([0-9]{1,8})$/

1

使用這個表達式:

/^user\d{1,8}$/ 
3

利用^$,只有當模式是唯一的行時才匹配。那是你要的嗎?如果是這樣,使用以下命令:

preg_match('/^user[0-9]{1,8}[^0-9]$/' , $string); 

如果你想在一條線上的任何地方找到這種模式,我會嘗試:

preg_match('/user[0-9]{1,8}[^0-9]/' , $string); 

與往常一樣,你應該使用一個參考工具,如RegexPal做你的正則表達式測試是孤立的。