2

.25(例: 1.25, )の 10 進数の倍数として表される数値に一致する正規表現を作成しようとしています14.75

// Must Match
1.0
1.25
1.250000
1.5
1.500
1.75
1.7500

// Must Not Match
1.2
1.46
1.501
1.99

これまでのところ、次の式があります\d+(\.((0+)|(250*)|(50*)|(750*)))gskinner.com/regexrのようなオンライン ツールを使用すると機能します。検証属性で式を使用して EntityFramework db をシードすると、検証エラーが発生します。

[RegularExpression(@"^\d+(\.((0+)|(250*)|(50*)|(750*)))$", ErrorMessage = "Hours must be 15 minute increments expressed as decimals (ex. .0, .25, .5, .75)")]
public double Hours { get; set; }

同様の質問 (数値の小数部分を最も近い .25、.5、.75、または整数に丸める方法を探しています) ですが、上記のデータ注釈を使用するには正規表現を使用する必要があります。

質問:

  1. 私の表現の何が問題なのか分かる人はいますか?

  2. 整数をサポートするように拡張できる場合のボーナス ポイント (例: 4or4.25ではなく4.or 4.62)

4

2 に答える 2

1

これは整数にも一致します。

^\d+(\.(25|5|75|0)0*)?$

RegexHeroでテストしました。バックステージに .NET Regex エンジンがあります。すべてのテスト ケースを一緒に使用している場合は、必ずMultilineオプションを選択して、^$記号がテキスト全体ではなく各行に個別に一致するようにしてください。

于 2012-11-15T01:16:57.283 に答える
1

そのような数を一致させるには、正規表現パターンを使用します

 (?!0\d)\d+(?:[.](?:25|5|75|0)0*)?(?!\d)

入力がそのような数値であることを検証するには、正規表現パターンを使用します

 ^(?!0\d)\d+(?:[.](?:25|5|75|0)0*)?$

どちらの場合も、最初の部分はオプションであり、 match がそれらをトリミングして;だけを取る場合(?!0\d)、 などの無効な先行ゼロを持つ番号の一致/検証を許可しません。このオプションの部分が正規表現に存在する場合、検証は失敗します。000003.2503.250

于 2012-11-15T01:06:54.357 に答える