前のスレッドで x_x さんが、
\n が 更新時に \r\n になってるのでしょうか?
とコメントされたとおり、JavaSript で取得する改行は \n だが、サーバーに送信されると \r\n になるということが、
クライアントサイドの検証では想定している通り「1行58文字、3行まで」が出来ているのですが、サーバーサイドの検証では「1行57文字、3行まで」になってしまいます。
ということの原因と思われます。
クライアント側とサーバー側での改行コードの違いについて詳しくは以下の記事が参考になると思います。
textarea は送信前と送信後で文字列の内容が変化する
https://qiita.com/s_osa/items/c791d98e673db3815a7e
つまり、textarea の改行コードは、JavaScript 側では LF (\n) となるが、サーバーに送信されると CRLF (\r\n) になるということです。
C# での正規表現ではメタ文字 '.' には '\r' が含まれるので、正規表現パターン ".{0,58}" では '\r' もマッチします。(ちなみに、'\n' はマッチしない)
今回の質問者さんの検証結果「1行58文字、3行まで」は、例えば、textarea に 58 文字入力した後改行しサーバーに送信したのだと思いますが、その場合サーバーが受け取る文字列は "...58文字...\r\n" となったはずです。
"...58文字...\r\n" は '\r' までは 59 文字ですので、質問者さんが使った正規表現パターン "(.{0,58})(\n...." にはマッチしないという結果になったのだと思います。
正規表現パターンで、'\n' または '\r\n' どちらもマッチするようにすれば望む結果が得られるのではないかと思います。
自分の ASP.NET MVC5 環境で、質問者さんのコードに少しだけ手を加えて(ちょっと疑問はありましたがなるべく変えないようにして)、以下のコードで試してみました。
[RegularExpression(@"^(.{0,5})((\n|\r\n).{0,5}|)((\n|\r\n).{0,5}|)$")]
質問者さんのコードとは、\n ⇒ (\n|\r\n) の変更、@ の追加、58 文字ではなく簡単のため 5 文字にした点が異なります。
結果、自分が試した限りでは、期待通りクライアント側でもサーバー側でも「1行5文字、3行まで」となりました。
質問者さんの方でもお試しください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。