- if (preg_match('/^[0-9]{1,2}(\.[0-9]{1,2})?$/', $tswork) == 0) {エラー処理}
でうまくいくかと思われます。
最初に!をつけたいなら、
- if ( !(preg_match('/^[0-9]{1,2}(\.[0-9]{1,2})?$/', $tswork) === 1) ) {エラー処理}
とすることで、うまくいくと思います。(実際にテストしていませんが)
!は否定の論理演算子ですが、今回の場合、括弧をつけないと、
preg_match('/^[0-9]{1,2}(\.[0-9]{1,2})?$/', $tswork
の結果に対して否定を行い、その後、値が「1」であればTRUEと判断されます。(たぶん。。。)
これですと、ほしい動作にならないため、
preg_match('/^[0-9]{1,2}(\.[0-9]{1,2})?$/', $tswork) === 1
の結果(TRUE/FALSE)に対して、否定をするように括弧を使います。
==と===の違いですが、==を使うと「値」が同等かどうかを判断しますが、
===にすることで、値だけではなく「型」が同じかどうかも
チェックされるようになります。
前回のレスの文では、==でも===でも同じ挙動をするので、どっちでも
問題ありません。
が、今回の初めの文では、挙動が違うので注意が必要です。
というのも、
preg_matchの返り値を確認すると、
下記のいずれかの値が返ってくるようになっています。
0 :マッチしない(int型)
1 :マッチした(int型)
FALSE:エラーが発生した(bool型)
(
http://www.php.net/manual/ja/function.preg-match.php)
- if (preg_match('/^[0-9]{1,2}(\.[0-9]{1,2})?$/', $tswork) == 0) {エラー処理}
ご存知かも知れませんが、型チェックをしない場合、FALSEは「0」と同等として
扱われるため、エラーが発生した(返り値がFALSE)場合、
エラー処理に進みます。
そして、マッチしなかった(返り値が0)場合も、もちろんエラー処理に進みます。
ですが、
- if (preg_match('/^[0-9]{1,2}(\.[0-9]{1,2})?$/', $tswork) === 0) {エラー処理}
の場合は、マッチしなかった(返り値が0)場合はエラー処理に進みますが、
エラーが発生した(返り値がFALSE)場合は、型が異なるため
エラー処理に進みません。
あまりPHPでは型という考えを意識する機会が少ないのですが、
自動的にPHPが内部的に変更や解釈をしているだけなので、
型の存在を意識していないと、場合によってはバグなどに
つながるため、勉強してみるといいかもしれません。
PHPマニュアルもご参照ください。
http://www.php.net/manual/ja/language.operators.comparison.php 
kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。