如何使用正则表达式匹配尾随换行?

时间:2013-05-14 10:28:35

标签: php regex

我正在尝试验证字符串,以便不允许尾随空格/换行符(PHP_EOL,\ n,\ r,\ t和“\ t”)。这是代码:

$pattern = '/^[a-zA-Z0-9 ]+?[^\s]$/';
$value = 'foo' . PHP_EOL;
$status = preg_match($pattern, $value);

尾随PHP_EOL和“\ n”表达式匹配,“\ t”,“\ r”和“”不匹配。

在字符串末尾禁止所有空格/换行符的正确表达式是什么,包括PHP_EOL和“\ n”?

3 个答案:

答案 0 :(得分:2)

$的问题是,它在字符串or immediately before a newline character that is the last character in the string (by default)的末尾匹配,因此您无法使用{{1}匹配字符串末尾的\n }}。锚。

为了避免你可以使用$(请参阅php.net上的escape sequences),它总是在字符串的末尾匹配(也独立于\z修饰符)。

所以解决方案就是

multiline

$pattern = '/^[a-zA-Z0-9 ]+?(?<!\s)\z/'; negative lookbehind assertion,如果(?<!\s)

之前没有空格字符,则为真

答案 1 :(得分:0)

试试这个

$pattern = '/\s(?=\s*$)/';
$value = 'foo'. PHP_EOL;
$status = preg_match($pattern, $value);

if(!$status) {
    echo "Allow";
}
else {
    echo "Not Allow";
}

答案 2 :(得分:0)

这听起来像一个基本的“无尾随分隔符”问题,如here所示,但是使用空格而不是连字符。

'/^[a-zA-Z0-9]+(\s+[a-zA-Z0-9]+)*$/'

这个正则表达式假定分隔符可以是任何类型的空格,并且可以有多个空格。如果您只想允许一个空格字符(\x20),则可以执行此操作:

'/^[a-zA-Z0-9]+( [a-zA-Z0-9]+)*$/'