1

フォームの文字列を一致させたい:

123
.123
1.123

そして、正規表現に次の文字列を使用しています

@"^\\d*(?:\\.\\d+)?$"

ただし、次の形式の文字列にも一致します

1.2.3
1..2..3
123...

私の正規表現の何が問題になっていますか? 文字列に前述の数値形式以外のものを含めたくないため、 ^andを使用しました。$

編集:

のような文字列で一致するものをログに記録した78..7ところ、一致する場所が 0 で長さが 0 で、結果として "" が一致することがわかりました。何か案は?長さが 0 の場合、範囲の場所を NSNotFound にするべきではありませんか? その場合、正規表現は問題なく、 !length を確認するだけでよいと思いますが、それは不要な回避策のようです。

4

5 に答える 5

1

この正規表現を試してください:

^(?<!\.)\d*(\.\d+)?$

負の後読みアサーションを追加しました。これは、その数値の前にドットが許可されていないことを意味します。これで問題が解決するはずです。

于 2013-06-12T19:44:32.287 に答える
0

これはうまくいきますか?

@"^\\d*\\.?\\d+$"

ここではバックスラッシュをエスケープしていません:

^\d*\.?\d+$

于 2013-06-12T21:05:55.633 に答える
0

私の最善の推測は、$シンボルが機能していないことについて rekire が正しいということです。その場合、正規表現は文字列の先頭にある空の部分文字列と実際に一致します。これは、NSNotFound ではなく、位置 0 で長さ 0 の一致が見つかったと言う理由を説明しています。

于 2013-06-12T21:36:08.840 に答える