2015-12-22 108 views
1

我有下一个代码,我想知道如果字符串的有效基于正则表达式。 我想只验证下一个序列后面的字符串。带有可选|的正则表达式

lettersOrNumbersAndunderDashes=lettersOrNumbersAndUnderdashes 

但是,如果存在垂直条,则可以重复该顺序。

例如parameter1=value1|parameter2=value2|parameterN=valueN

if (preg_match("/((^[A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perPd_asd=as_3_4d|asdas=asdasd")) 
    return 'Valid'; 

    return 'Invalid'; 

我想我失去了一些东西或建造一个错误的正则表达式。

+0

第一个字符串只有一个'='。 https://regex101.com/r/yZ4qE2/1另外'[A-Za-z0-9_]'可以是'\ w'。 – chris85

+0

你可以更具体一点吗?,我是相当新的正则表达式 –

+0

你的表达式说'东西',然后是'=',然后'东西'。你的第一个字符串符合,因为有一个'='。你的第二个它在第一个'='后停止。 (我的regex101演示反过来,因为我开始倒退).. – chris85

回答

0

你做了错误的事情在模式的开始是把一个^ ,这意味着只有当文本位于字符串的开头时它才会匹配。这应该解决:

if (preg_match("/(([A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perPd_asd=as_3_4d|asdas=asdasd")) 
return 'Valid'; 

return 'Invalid'; 
0

参数名称可能从数字开始?

你需要更多的测试案例为你的正则表达式,例如:

0=somevalue 
param=value| 
[email protected]#$%^|some_param=some-value 
_=VALUE|abc=*** 
a=1|b=2|c=3 
param=0|param=1 

我的解决办法是:

^(([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)\|)*([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)$