2009-08-20 6 views
2

簡単な質問ですが、私はこのゲームを解決する頭痛があります。正規表現の例。Regexは最初の空白を削除します

[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

私が理解したところでは、あなたの文字列の最初または最後に空白を入れることができない正規表現が必要です。これらの線に沿って何か作業をする必要があります:Pythonで

/^[a-zA-Z0-9][a-zA-Z0-9\s]+[a-zA-Z0-9]$|^[a-zA-Z0-9]*$/ 

例:

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

+0

これは、行と行末のcharctersの始まりであり、使用方法ではありません。 – Victor

+0

私はそれらを含めるために投稿を編集していました.. –

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

+0

これらの文字だけを一致させたい場合は、空白以外のすべての文字に一致する\ Sを使うことはできません。代わりに、あなたが望む文字を指定する必要があります。これは私の答えと同じです。 –

+0

okありがとうJG :) – wow

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

なぜこれでregexを使いたいですか?

(デフォルトでは)トリム削除:

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

文字列に無効な文字(%、など)が含まれているかどうかをテストしたいので、!または&。あなたのソリューションはそれを可能にします。 –

関連する問題