正则表达式与可选|

时间:2015-12-22 02:57:56

标签: php regex

我有下一个代码,我试图根据正则表达式知道字符串是否有效。 我正在尝试仅验证遵循下一个序列的字符串。

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';

我认为我错过了某些东西或构建错误的正则表达式。

2 个答案:

答案 0 :(得分:0)

参数名称可能从数字?

开始

您需要更多正则表达式的测试用例,例如:

0=somevalue
param=value|
one_more_param=@#$%^|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_]*=[^\|=]+)$

答案 1 :(得分:0)

你做的错误是在模式的开头放置一个^,这意味着它只会在文本位于字符串的开头时匹配。这应该解决:

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

return 'Invalid';