繁体   English   中英

在php中使用正则表达式测试管道分隔格式

[英]Test pipe delimited format with regular expression in php

我需要验证字符串是否为以下格式,否则需要返回警告消息。

紫色|葡萄汁
绿色|生菜沙拉很好
黄|猴子像香蕉
红色|西瓜好吃

我在上面的管道分隔数据中需要它,每行被分成两个块,然后是新行。

如果一行中有3个管道,则不正确。

此RegEx将验证整个字符串是否符合您的规格: ^(\\w+\\|[\\w ]+(\\n|$))+$
如果其中一行无效,则preg_match()将返回false
注意:我假设左侧部分将只包含数字和字母,第二部分相同且加空格
在此处实时查看: http//regex101.com/r/iV0tC4

因此,您需要的所有代码是:

if (!preg_match($regex,$string)) trigger_error("Invalid string!",E_USER_WARNING);

实时代码: http//codepad.viper-7.com/i3Hcjs

我不确定您想要得到什么,但是如果我猜您需要这样的东西:

<?
$lines = explode("\n",$str);

foreach ($lines as $lineIndex => $oneLine)
    if (count(explode('|',$oneLine))>2) echo "You have an error in line ".$lineIndex;

?>

只需进行RegExp比赛即可。 用新行分割字符串,然后在每行上运行RegExp匹配,如果匹配返回false,则尽早结束函数(短路)。 RegExp本质上是START_OF_LINE(^),不是管道([^ \\ |] )和管道(\\ |),不是管道([^ \\ |] )和END_OF_LINE($)。

function verify($str) {
    $regex = '/^[^\|]*\|[^\|]*$/';
    $all = explode("\n", $str);
    foreach($all as $line) {
        if(preg_match($regex, $line) == false) 
            return false;
    }
    return true;
}

echo verify("bad") === false;
echo verify("bad|bad|bad") === false;
echo verify("abc|123\nbad") === false;
echo verify("abc|123\nbad|bad|bad") === false;
echo verify("good|good") === true;
echo verify("good|good\nnice|nice") === true;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM