2011-08-25 135 views
0

任何人都可以用正則表達式來幫助我嗎?我有一個像數字的字符串:需要正則表達式幫助

X024123099XYAAXX99RR 

我需要一個正則表達式來檢查用戶是否插入了正確的信息。該規則還應該有一個後備,即從左向右檢查輸入。

例如,測試時這些投入應該返回TRUE:

X024 

X024123099X 

X024123099XYA 

X024123099XYAAXX99R 

而這些的人應該返回FALSE:

XX024 

X02412AA99X 

X024123099XYAAXX9911 

等。正則表達式必須從左邊開始檢查正確的語法。 我有類似的東西,但是這似乎並沒有被正確的:

\w\d{0,12}\w{0,6}\d{0,2}\w{0,2} 

非常感謝您的幫助(我是新來的正則表達式)

+0

什麼是*正確的語法?在爲它編寫正則表達式之前,您需要明確地定義它。順便說一下,'\ w'也會匹配數字。使用'[A-Z]'匹配大寫字母或'[a-zA-Z]'匹配所有字母,但不包含數字。 – OpenSauce

+1

請注意'\ w'也會匹配下劃線。 – lukad

+0

哦,謝謝..; o)我編輯了我的帖子,例如有真/假的例子。 – Rufnex

回答

1

你可以採取OpenSauce的正則表達式,然後將其劈死件允許部分匹配:

^[A-Z](\d{0,9}$|\d{9}([A-Z]{0,6}$|[A-Z]{6}(\d{0,2}$|\d{2}([A-Z]{0,2}$)))) 

這不是很漂亮,但據我所知它可以編碼您的要求。

本質上,我把每個案例像\d{9}和取代它像(\d{0,9}$|\d{9}<rest of regex>)

我加了^$,否則它會匹配其他無效字符串中的子字符串。例如,它會看到一個無效的字符串,如XX024,並認爲它沒問題,因爲它包含X024

+0

嗨尼克, 大thx它的工作與 如果(preg_match(「/^[AZ](\ d {0,9} $ | \ d {9}([AZ] {0,6} $ | AZ] {6}(\ d {0,2} $ | \ d {2}([AZ] {0,2} $))))/ i「,$ key)) – Rufnex

+0

@Rufnex,很高興聽到它已解決您的問題:)如果您對此答案滿意爲正確的解決方案,請單擊旁邊的綠色複選標記以將其標記爲「接受的答案」。它阻止了這個問題出現在未回答的問題列表中(以及給我點數)。 –

+0

Forgott it .. thx; o) – Rufnex

1

如果我理解正確的話,你的字符串應該匹配正則表達式

[A-Z]\d{9}[A-Z]{6}\d{2}[A-Z]{2} 

但你也想檢查一個字符串可能是一個匹配的字符串的前綴,是正確的?你也許可以用一個正則表達式來表達這一點,但是我想不出一種容易閱讀的方法。

你還沒有說過你正在使用哪種語言,但是如果你的語言給你一種方法來判斷在檢查正則表達式時是否已經達到了輸入字符串的末尾,那麼這將給你一個簡單的方法來獲得你要。例如。在Java中,Matcher.hitEnd告訴你到底是否達到了方法,所以下面的代碼:

static Pattern pattern = Pattern.compile("[A-Z]\\d{9}[A-Z]{6}\\d{2}[A-Z]{2}"); 
static Matcher matcher = pattern.matcher(""); 

public static void main(String[] args) { 
    String[] strings = { 
     "X024", 
     "X024123099X", 
     "X024123099XYA", 
     "X024123099XYAAXX99R", 
     "XX024", 
     "X02412AA99X", 
     "X024123099XYAAXX9911" 
    }; 
    for (String string : strings) { 
    out.format("%s %s\n", string, inputOK(string) ? "OK" : "not OK"); 
    } 
} 

static boolean inputOK(String input) { 
    return matcher.reset(input).matches() || matcher.hitEnd(); 
} 

給輸出:

X024 OK 
X024123099X OK 
X024123099XYA OK 
X024123099XYAAXX99R OK 
XX024 not OK 
X02412AA99X not OK 
X024123099XYAAXX9911 not OK 
+0

Thx爲您的答案..您的例如看起來不錯..但我沒有確切的想法如何將其翻譯爲PHP。你能再幫助我嗎? – Rufnex