diff --git a/modules/field/modules/number/number.module b/modules/field/modules/number/number.module
index ad55145..56588bc 100644
--- a/modules/field/modules/number/number.module
+++ b/modules/field/modules/number/number.module
@@ -377,16 +377,16 @@ function number_field_widget_validate($element, &$form_state) {
     switch ($type) {
       case 'float':
       case 'decimal':
-        $regexp = '@[^-0-9\\' . $field['settings']['decimal_separator'] . ']@';
+        $regexp = '@^[+-]?[0-9\\' . $field['settings']['decimal_separator'] . ']+$@';
         $message = t('Only numbers and the decimal separator (@separator) allowed in %field.', array('%field' => $instance['label']
         break;
 
       case 'integer':
-        $regexp = '@[^-0-9]@';
+        $regexp = '@^[+-]?[0-9]+$@';
         $message = t('Only numbers are allowed in %field.', array('%field' => $instance['label']));
         break;
     }
-    if ($value != preg_replace($regexp, '', $value)) {
+    if (!preg_match($regexp, $value)) {
       form_error($element, $message);
     }
     else {
