2009-08-20 32 views
2

簡單的問題,但我很頭疼解決這個遊戲。示例正則表達式。正則表達式在開始時刪除空格

[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; 
} 

回答

1

從我的理解,你想有一個正則表達式不允許你的字符串有之初無論是空白,或在年底。沿着這些線路的東西應該工作:

/^[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

5

嘗試:

/^\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

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

爲什麼要在這個地方使用正則表達式?

裝飾(默認)刪除:

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

相關問題