2011-11-07 23 views
5

Necesito crear una expresión regular para validar valores numéricos separados por comas.Expresión regular de PHP para números y comas solo

que debe ser similar: 1,2,3,4,5 etc ....

El valor debe ser un solo dígito como: 1 sin espacios vacíos antes o después, sin comas antes o después de .

O ... múltiples valores numéricos separados por comas. Los primeros y últimos caracteres deben ser un número.

Tengo el siguiente código pero sólo verá si los números y comas en ningún orden en particular:

¿Cómo puedo cambiar la expresión regular siguiente para ajustarse a la descripción anterior?

¡Gracias!

// get posted value 
if(isset($_POST['posted_value'])) 
{ 
    $sent_value = mysqli_real_escape_string($conn, trim($_POST['posted_value'])); 
    if(preg_match('/^[0-9,]+$/', $posted_value)) 
    { 
     $what_i_need = $posted_value; 
    } 
    else 
    { 
     $msg .= $not_what_i_need; 
    } 
} 
else 
{ 
    $msg .= $posted_value_not_set; 
} 
+0

Solo para dar un motivo para la edición, usted estaba diciendo [esto] (http://en.wikipedia.org/wiki/Coma) cuando se refería a [esto] (http: //en.wikipedia .org/wiki/Comma). – darvids0n

Respuesta

28

Esto debe hacerlo:

/^\d(?:,\d)*$/ 

Explicación:

/   # delimiter 
^  # match the beginning of the string 
    \d   # match a digit 
    (?:  # open a non-capturing group 
     ,  # match a comma 
     \d  # match a digit 
    )  # close the group 
    *  # match the previous group zero or more times 
    $   # match the end of the string 
/   # delimiter 

Si permite que los números de varios dígitos, a continuación, cambiar \d-\d+.

2

¿Permite al usuario ingresar números con comas en ellos, como 5,000 por ejemplo? ¿Qué pasa con los decimales como 5.6?

Como alternativa, puede validar la entrada usando explotar algo como esto.

$values = explode(',',$sent_value); 
$valid = true; 

foreach($values as $value) { 
    if(!ctype_digit($value)) { 
     $valid = false; 
     break; 
    } 
} 
Cuestiones relacionadas