验证多行文本,以便所有行都包含具有严格的管道分隔格式的文本
Validate multiline text so that all lines contain text with a strict, pipe-delimited format
假设我们的输入可能包含一行或多行文本,并且所有行都必须遵守严格的格式。
number|any character(s)|number
例如:
150|example.com/|2500
600|hello_world|1500
中间的字符可以包含任何字符,不包括空格。开头和结尾的数字可以是单个数字,也可以是多个数字。
我想检查文本中的所有行是否都符合要求的格式。
到目前为止,我想出了以下正则表达式,但它 returning true
即使只有一行与上面的格式匹配。
/[0-9]+\|.*?\|[0-9]/im
如何调整我的模式以验证整个文本和 preg_match()
中的 return true
?
您可以使用
/\A([0-9]+\|\S*\|[0-9]+)(?:\R(?1))*\z/
见regex demo。 详情:
\A
- 字符串开头
([0-9]+\|\S*\|[0-9]+)
- 第 1 组:一位或多位数字,|
,任意零个或多个非空白字符,尽可能多,|
,以及一位或多位数字
(?:\R(?1))*
- 换行零次或多次重复,然后是第 1 组模式
\z
- 字符串结尾。
见PHP demo:
$text = "150|google.com/|2500\n600|hello_world|1500";
if (preg_match('~\A([0-9]+\|\S*\|[0-9]+)(?:\R(?1))*\z~', $text)){
echo "Valid!";
}
// => Valid!
假设我们的输入可能包含一行或多行文本,并且所有行都必须遵守严格的格式。
number|any character(s)|number
例如:
150|example.com/|2500
600|hello_world|1500
中间的字符可以包含任何字符,不包括空格。开头和结尾的数字可以是单个数字,也可以是多个数字。
我想检查文本中的所有行是否都符合要求的格式。
到目前为止,我想出了以下正则表达式,但它 returning true
即使只有一行与上面的格式匹配。
/[0-9]+\|.*?\|[0-9]/im
如何调整我的模式以验证整个文本和 preg_match()
中的 return true
?
您可以使用
/\A([0-9]+\|\S*\|[0-9]+)(?:\R(?1))*\z/
见regex demo。 详情:
\A
- 字符串开头([0-9]+\|\S*\|[0-9]+)
- 第 1 组:一位或多位数字,|
,任意零个或多个非空白字符,尽可能多,|
,以及一位或多位数字(?:\R(?1))*
- 换行零次或多次重复,然后是第 1 组模式\z
- 字符串结尾。
见PHP demo:
$text = "150|google.com/|2500\n600|hello_world|1500";
if (preg_match('~\A([0-9]+\|\S*\|[0-9]+)(?:\R(?1))*\z~', $text)){
echo "Valid!";
}
// => Valid!