Php 正则表达式在开头删除空格

Php 正则表达式在开头删除空格,php,regex,Php,Regex,这个问题很简单,但解决这个游戏让我头疼。示例regex [a-zA-Z0-9\s] [whitespace]Stack[whitespace]Overflow - not allow Stack[whitespace]Overflow - allow Stack[whitespace]Overflow[whitespace] - not allow 让我知道 更新并开始工作 function regex($str) { $check = preg_replace('/^[a-zA-Z

这个问题很简单,但解决这个游戏让我头疼。示例regex

[a-zA-Z0-9\s]

[whitespace]Stack[whitespace]Overflow - not allow
Stack[whitespace]Overflow - allow
Stack[whitespace]Overflow[whitespace] - not allow
让我知道

更新并开始工作

function regex($str)
{
    $check = preg_replace('/^[a-zA-Z0-9][a-zA-Z0-9\s]+[a-zA-Z0-9]$|^[a-zA-Z0-9]*$/', "", $str);

    if (empty($check)) {
        return true;
    } else {
        return false;
    }
}

$str = 'Stack Overflow ';
$validator = regex($str);

if ($validator) {
    echo "OK » " .$str;
} else {
    echo "ERROR » " . $str;
}

据我所知,您需要一个正则表达式,它不允许字符串的开头或结尾有空格。按照这些思路应该可以做到:

/^[a-zA-Z0-9][a-zA-Z0-9\s]+[a-zA-Z0-9]$|^[a-zA-Z0-9]*$/
Python中的一个示例:

import re
test = ["Stack Overflow",
        "Stack&!Overflow",
        " Stack Overflow",
        "Stack Overflow ",
        "x",
        "", 
        " "]
regex = re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9\s]+[a-zA-Z0-9]$|^[a-zA-Z0-9]*$')
for s in test:
    print "'"+s+"'", "=>", "match" if regex.match(s) != None else "non-match"
输出:

'Stack Overflow' => match
'Stack&!Overflow' => non-match
' Stack Overflow' => non-match
'Stack Overflow ' => non-match
'x' => match
'' => match
' ' => non-match
尝试:

如果您只需要字母、数字和下划线,以及两个单词,不能少,也不能多:

/^\w+\s+\w+$/
毫无疑问

/^\p{Alnum}+\s+\p{Alnum}+$/
尽管如此,在某些正则表达式样式中(特别是PHP,我现在看到的就是它的目标),您可以使用:

/^[[:alnum:]]+\s+[[:alnum:]]+$/
如果可以接受任何数量的此类词语和数字:

/^\w[\w\s]*\w$|^\w$/

你到底为什么要用正则表达式来做这个

修剪(默认情况下)删除:

因此,您所需要的是:

function no_whitespace($string)
{
      return trim($string) === $string;
}
就这样

$tests = array
(
    ' Stack Overflow',
    'Stack Overflow',
    'Stack Overflow '
);

foreach ($tests as $test)
{
   echo $test."\t:\t".(no_whitespace($test) ? 'allowed' : 'not allowed').PHP_EOL;
}

)()

在无效的行中,它将与该行的部分内容匹配为有效。我认为任何不显式使用^和$字符的字符都不起作用。这是行首字符和行尾字符,而不是您如何使用它。
[^\s]
将匹配任何非空白字符,包括标点符号和控制字符。
\s
[^\s]
的作用相同,因此,使用后者有点愚蠢。如果只想匹配这些字符,则不能使用\s,因为它匹配所有非空白字符。相反,您必须指定所需的字符,就像我在回答中所做的那样。\w包括他不需要的下划线。因为他还想测试字符串是否包含无效字符,例如%!或&。您的解决方案允许他们。
*    " " (ASCII 32 (0x20)), an ordinary space.
* "\t" (ASCII 9 (0x09)), a tab.
* "\n" (ASCII 10 (0x0A)), a new line (line feed).
* "\r" (ASCII 13 (0x0D)), a carriage return.
* "\0" (ASCII 0 (0x00)), the NUL-byte.
* "\x0B" (ASCII 11 (0x0B)), a vertical tab.
function no_whitespace($string)
{
      return trim($string) === $string;
}
$tests = array
(
    ' Stack Overflow',
    'Stack Overflow',
    'Stack Overflow '
);

foreach ($tests as $test)
{
   echo $test."\t:\t".(no_whitespace($test) ? 'allowed' : 'not allowed').PHP_EOL;
}