2011-08-25 139 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