2010-12-08 14 views
2


私は知ってほしい、どのような正規表現を私の文字列のために持っている必要があります。私の文字列は "|"と数字。
たとえば、「111 | 333 | 111 | 333」となります。文字列は数字から始まる必要があります。私はこのコードを使用していますが、彼は醜いです:"|"のPHP正規表現数字は

if (!preg_match('/\|d/', $ids)) { 
    $this->_redirect(ROOT_PATH . '/commission/payment/active'); 
} 

ありがとうございます。私の英語のために申し訳ありません。

答えて

3

あなたの例を見ると、数値の始まりと終わりの文字列に一致する正規表現を探していると仮定し、数字は|で区切られます。あなたが使用することができた場合:

^\d+(?:\|\d+)*$ 

説明:

^  - Start anchor. 
\d+ - One ore more digits, that is a number. 
(? ) - Used for grouping. 
\| - | is a regex meta char used for alternation, 
     to match a literal pipe, escape it. 
    * - Quantifier for zero or more. 
$  - End anchor. 
2

正規表現は次のとおりです。

^\d[|\d]*$ 

^ - Start matching only from the beginning of the string 
\d - Match a digit 
[] - Define a class of possible matches. Match any of the following cases: 
    | - (inside a character class) Match the '|' character 
    \d - Match a digit 
$ - End matching only from the beginning of the string 

注:|はこのような状況では必要ありませんエスケープ。

+0

私はOPが実際にそれを指定していないことを知っていますが、これは '123 || 456 |'(最後に二重パイプとパイプ)のようなシーケンスも許します。 –

+0

@Felixまあ...はい。それは要件に従う。 codaddictの回答は、最後の文字として数字を強制したい場合にはより良いでしょう。 –

1

|または数字で始まり数字で始まる文字列は、^\d(\||\d)*$と書かれています。つまり、\|(エスケープに気付く!)または\dと書かれた数字です。

^$の意味は、開始から終了までです。つまり、その前後には他の文字はありません。

1

私は/^\d[\d\|]*$/と思っていますが、常に3桁の数字を棒で区切って入力すると、/^\d{3}(?:\|\d{3})*$/が必要です。

EDIT: 最後に、バーで区切られた1つ以上の数字のシーケンスが常にある場合は、/^\d+(?:\|\d+)*$/となります。