正则表达式在开始时删除空格

问题描述:

简单的问题,但我很头疼解决这个游戏。示例正则表达式。正则表达式在开始时删除空格

[a-zA-Z0-9\s] 

[whitespace]Stack[whitespace]Overflow - not allow 
Stack[whitespace]Overflow - allow 
Stack[whitespace]Overflow[whitespace] - not allow 

让我知道

更新regex from JG,它的工作。

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 
+0

,它将匹配线为有效的部分。我认为对于这个没有明确使用^和$字符的东西是行不通的。 – Victor 2009-08-20 23:34:29

+0

这是线条和线条结束的开始,而不是你如何使用它。 – Victor 2009-08-20 23:35:04

+0

我在编辑帖子以包含那些.. – 2009-08-20 23:35:35

尝试:

/^\S.*\S$|^\S$/ 

如果你只想要字母和数字和下划线,以及tw O字,不会少,没有更多:

/^\w+\s+\w+$/ 

对于无下划线,

/^\p{Alnum}+\s+\p{Alnum}+$/ 

然而,在一些正则表达式的风格(尤其是PHP,我现在看到的是目标),您可以使用此:

/^[[:alnum:]]+\s+[[:alnum:]]+$/ 

如果任何数量的这样的文字和数字可以接受:

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

这项工作!但如何只允许a-z A-Z 0-9? – wow 2009-08-20 23:41:05

+0

如果只想匹配那些字符,则不能使用\ S,因为它匹配每个非空白字符。相反,你必须指定你想要的字符,就像我在我的回答中所做的那样。 – 2009-08-21 00:14:57

+0

好的谢谢JG :) – wow 2009-08-21 00:16:12

if ($string =~ /^\S.*\S$/){ 
    print "allowed\n"; 
} else { 
    print "not allowed\n"; 
} 

为什么要在这个地方使用正则表达式?

装饰(默认)删除:

* " " (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; 
} 

http://codepad.org/fYNfob6y;)中的线而invald

+0

因为他也想测试一下字符串是否包含无效字符,比如%!!要么 &。你的解决方案允许他 – 2009-08-21 16:04:03