3

誰かが 1 つのスペースで一連の数字を検証する方法を教えてもらえますか。最後にオプションの特殊文字「#」があり、その後に 5 桁の数字が続きます。

例:

12345 6587#2584

私は試してみました

(0(?:\d{0,11}|(?=\d* \d*$)[\d ]{0,12}))

しかし、最後にオプションの「#」を追加し、その後に数字を追加する方法がわかりません。

4

2 に答える 2

2

これでうまくいくはずです

/^\d+\s\d+(?:#\d+)?$/

rubularで見る

^      beginning of string
\d+    one or more numbers
\s     any whitespace character
\d+    one or more numbers
(?:    begin non-capturing group
  #    literal '#' character
  \d+  one or more numbers
)      end non-capturing group
$      end of string

編集

/^0[\d\s]{,11}(?:#\d{,5}?$/

で始まり0、その後に最大 11 個の数字またはスペースが続く文字列に一致します。その後にオプション#が続き、その後に最大 5 つの数字が続きます。

于 2012-12-05T07:33:11.500 に答える
0

この質問はあまり明確ではありませんが、macek の提案は、オプションのタグ「#」の後にいくつかの数字を最後に追加する方法についての質問に実際に答えているので、試してみてください。(具体的に(?:#\d+)?$は、正規表現の関連部分です(?:#\d{0,5})?$。0 ~ 5 桁が存在することを確認します。)

ただし、オプションの「#」の前に正確に1つのスペースと最大12桁があることを確認するための正規表現は正しくありません。書かれているように、先読みは意味が\d{0,11}ありません。なぜなら、任意の文字列の先頭にある 0 幅の文字列に一致するからです (これは 0 桁と同等であるため)。必要なのは のようなものです/^(?:[\d\s]{1,13}$)\d*\s\d*$/。これにより、正しい数の文字が存在し、それらがすべて数字またはスペースであることを確認してから、文字列にスペースが 1 つしかないことが確認されます。ここには少し冗長性がありますが、それは問題にはなりません。また、\sわかりやすくするためにスペース文字の代わりに使用していることに注意してください。の桁数{1,13}文字列が数字をまったく含まない単一のスペースで構成されることは正当であると想定しますが、空の文字列は不正です。これが正しい仮定でない場合は、括弧内の値を調整してください。

最後に、適切なスペースと桁数を確保するための上記の正規表現をオプションのタグの正規表現と組み合わせるには、先読みを変更して、 : it should be と#同様に一致できるようにする必要があります。$/^(?:[\d\s]{1,13}(#|$))\d*\s\d*(#\d{0,5})?$/

(上記の正規表現を実際にテストしていないことに注意してください。そのため、中間がすべての実装で機能することを 100% 確信している(#|$)わけではありません。そうでない場合は、冗長な に置き換えることができます(#\d{0,5})?。)

于 2012-12-05T08:14:56.550 に答える