我正在尝试验证字符串,以便不允许尾随空格/换行符(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”?
答案 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]+)*$/'