我需要驗證字符串是否採用以下格式,否則我需要返回警告消息。在php中使用正則表達式測試管道分隔格式
紫色|葡萄汁
綠色|生菜是好的沙拉
黃色|猴子喜歡香蕉
紅|西瓜好吃
我需要它在管道分隔數據,如以上,每條線分成兩個塊,然後是一條新線。
如果在一行中有3個管道,那麼它是不正確的。
我需要驗證字符串是否採用以下格式,否則我需要返回警告消息。在php中使用正則表達式測試管道分隔格式
紫色|葡萄汁
綠色|生菜是好的沙拉
黃色|猴子喜歡香蕉
紅|西瓜好吃
我需要它在管道分隔數據,如以上,每條線分成兩個塊,然後是一條新線。
如果在一行中有3個管道,那麼它是不正確的。
我不知道你正在試圖獲得,但如果我猜你需要的是這樣的:
<?
$lines = explode("\n",$str);
foreach ($lines as $lineIndex => $oneLine)
if (count(explode('|',$oneLine))>2) echo "You have an error in line ".$lineIndex;
?>
這個表達式將整串驗證您的規格:^(\w+\|[\w ]+(\n|$))+$
如果其中一條線路無效,preg_match()
將返回false
。
注:我以爲左邊部分將有一個數字,只有字母,第二個相同的加空間
看到它住在這裏:http://regex101.com/r/iV0tC4
因此,所有你需要的代碼是:
if (!preg_match($regex,$string)) trigger_error("Invalid string!",E_USER_WARNING);
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;