PHP - No permitir rellenar campo DNI sólo dándole al espacio

 
Vista:

No permitir rellenar campo DNI sólo dándole al espacio

Publicado por Estella (3 intervenciones) el 07/02/2019 18:02:25
Hola, encontré un código para crear el campo DNI en la plataforma de comercio electrónico WooCommerce.

Ese código (que no es mío eh) funciona bien, crea un campo en el formulario de pedidos para el NIF / CIF y lo guarda y lo registra correctamente.

El problema viene cuando algunos clientes le dan a la barra espaciadora, y el formulario lo valida como un campo "relleno", y deja pasar al siguiente apartado.

¿Alguien sabría qué debería poner para que esto no suceda?

He leído en algún sitio que con "una expresión regular" igual se solucionaba pero yo no soy experta en PHP y no sé cómo integrar esa "validación" o expresión regular en el siguiente código, que es el que crea el campo NIF:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
 * AÑADIR CAMPO NIF/CIF EN EL FORMULARIO DE PAGO
 */
 function woo_custom_field_checkout($checkout) {
 echo '

';
 woocommerce_form_field( 'nif', array( // Identificador del campo
 'type' => 'text',
 'class' => array('my-field-class form-row-wide'),
 'required' => true, // ¿El campo es obligatorio 'true' o 'false'?
 'label' => __('NIF / CIF'), // Nombre del campo
 'placeholder' => __('99999999D'), // Texto de apoyo que se muestra dentro del campo
 ), $checkout->get_value( 'nif' )); // Identificador del campo
 echo '

';
 }
 add_action( 'woocommerce_after_checkout_billing_form', 'woo_custom_field_checkout' );
 
/*
 * ACTUALIZAR DETALLES DEL PEDIDO CON EL NUEVO CAMPO
 */
 function woo_custom_field_checkout_update_order($order_id) {
 if ( ! empty( $_POST['nif'] ) ) {
 update_post_meta( $order_id, 'NIF', sanitize_text_field( $_POST['nif'] ) );
 }
 }
 add_action( 'woocommerce_checkout_update_order_meta', 'woo_custom_field_checkout_update_order' );
 
/*
 * MOSTRAR VALOR DEL CAMPO NIF LA PÁGINA DE EDICIÓN DEL PEDIDO
 */
 function woo_custom_field_checkout_edit_order($order){
 echo '

'.__('NIF').': ' . get_post_meta( $order->id, 'NIF', true ) . '

';
 }
 add_action( 'woocommerce_admin_order_data_after_billing_address', 'woo_custom_field_checkout_edit_order', 10, 1 );
 
/*
 * INCLUIR CAMPO NIF EN EL EMAIL DE NOTIFICACIÓN AL CLIENTE
 */
 function woo_custom_field_checkout_email($keys) {
 $keys[] = 'NIF';
 return $keys;
 }
 add_filter('woocommerce_email_order_meta_keys', 'woo_custom_field_checkout_email');
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kathyu
Val: 2.036
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No permitir rellenar campo DNI sólo dándole al espacio

Publicado por Kathyu (680 intervenciones) el 07/02/2019 18:56:45
Sin leer todo, puedo decirle que en el código donde se crea el textbox, coloque la propiedad min de HTML5 para que le diga que la longitud mínima sera la X cantidad de caracteres que tiene su DNI.

Así mismo le dejo un código con el cual yo hago que coloquen un código único de mi país, 17 caracteres separados en 4-6-3-1, para que usted vea como modifica su codigo.

1
2
3
<input class="form-control" name="nit" id="nit" maxlength="17"
type="text" placeholder="NIT" style="height: 40px;" pattern="[0-9]{4}-[0-9]{6}-[0-9]{3}-[0-9]{1}"
title="1234-123456-123-1" required autofocus>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No permitir rellenar campo DNI sólo dándole al espacio

Publicado por Estella (3 intervenciones) el 11/02/2019 15:38:01
Hola Kathyu,
la verdad es que eso ya lo intenté en su día.

Traté de poner la propiedad min siguiendo la sintaxis que veo en el código que crea el campo del NIF/CIF, pero no me funcionaba, por lo que no sé si es que mi sintaxis era incorrecta, o qué me estaba pasando.

Entiendo que lo que crea el campo NIF/CIF con php es esta parte del código:

woocommerce_form_field( 'nif', array( // Identificador del campo
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'required' => true, // ¿El campo es obligatorio 'true' o 'false'?
'label' => __('NIF / CIF'), // Nombre del campo
'placeholder' => __('99999999D'), // Texto de apoyo que se muestra dentro del campo
), $checkout->get_value( 'nif' )); // Identificador del campo
echo '


cómo debería ahí ponerle esa propiedad min ?

Lamento mi inexperiencia en código, muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo
Val: 922
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No permitir rellenar campo DNI sólo dándole al espacio

Publicado por italo (150 intervenciones) el 14/02/2019 19:35:53
Hola, normalmente las plataformas te proporcionan asistencia, pero tomemoslo como conocimiento general, como se observa woocommerce_form_field contruye el input con sus paramentros, como ya te han sugerido podrias "jugar" con minlength o con pattern que tambien te da la opcion de minimo y maximo (ambos html5) en tu caso tu codigo seria:

de:


1
2
3
4
5
6
7
8
woocommerce_form_field( 'nif', array( // Identificador del campo
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'required' => true, // ¿El campo es obligatorio 'true' o 'false'?
'label' => __('NIF / CIF'), // Nombre del campo
'placeholder' => __('99999999D'), // Texto de apoyo que se muestra dentro del campo
), $checkout->get_value( 'nif' )); // Identificador del campo
echo '

a:

agregamos: pattern=".{5,10}" el cual permite una validacion de minimo 5 caracteres "minlength" 5 y maximo "maxlength" 10


1
2
3
4
5
6
7
8
9
woocommerce_form_field( 'nif', array( // Identificador del campo
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'required' => true, // ¿El campo es obligatorio 'true' o 'false'?
'label' => __('NIF / CIF'), // Nombre del campo
'placeholder' => __('99999999D'), // Texto de apoyo que se muestra dentro del campo
'pattern' => '.{5,10}', // validacion de minimo 5 caracteres "minlength" 5 y maximo "maxlength" 10
), $checkout->get_value( 'nif' )); // Identificador del campo
echo '

en tu caso, deberas remplazar por lo que necesites 'pattern' => '.{5,10}'.

prueba en test.

salud2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

No permitir rellenar campo DNI sólo dándole al espacio

Publicado por Estella (3 intervenciones) el 16/02/2019 23:36:01
Hola,
primero muchas gracias por la respuesta, aunque lamentablemente.... no funciona

puse el código tal y como indcas pero nada, si le das al espacio, y ya le parece que has escrito algo en el campo, te deja continuar.

Puedes hacer la prueba añadiendo un producto cualquiera al carrito y luego dándole a hacer pedido en la zona superior del carro de la compra

http://www.skymedic.eu/tienda/

paso el link simplemente para que lo podáis probar, pero luego si es posible me gustaría borrarlo una vez que se haya testeado

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo
Val: 922
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No permitir rellenar campo DNI sólo dándole al espacio

Publicado por italo (150 intervenciones) el 18/02/2019 13:18:33
Hola, en el codigo que habias puesto no hay ninguna expresion regular.

Podrias probar haciendo todo con jquery, este es el script, habilita solo la escrituras de numero (no letras) y como maximo 10 numeros. no hay necesidad que modifiques tu codigo,

este seria tu codigo original y el cual utilizas nuevamente:

1
2
3
4
5
6
7
8
9
woocommerce_form_field( 'nif', array( // Identificador del campo
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'required' => true, // ¿El campo es obligatorio 'true' o 'false'?
'label' => __('NIF / CIF'), // Nombre del campo
'placeholder' => __('99999999D'), // Texto de apoyo que se muestra dentro del campo
), $checkout->get_value( 'nif' )); // Identificador del campo
echo '

y este es el codigo de jquery, el id es "nif" como en tu codigo. Use solo numeros, nose si tu campo NIF contiene letras.

prueba en test,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!--
<div>
  <input type='text' id='nif' placeholder='99999999D'>
</div>
-->
 
<!-- solo numeros, maximo 10 numeros -->
<script type="text/javascript">
$(document).ready(function(){
  $("#nif").attr('minlength','5');
  $("#nif").attr('maxlength','10');
  $("#nif").keypress(function(e){
    var keyCode = e.which;
    /*
    8 - (backspace)
    32 - (space)
    48-57 - (0-9)Numbers
    */
    if ( (keyCode != 8 || keyCode ==32 ) && (keyCode < 48 || keyCode > 57)) {
      return false;
    }
  });
});
</script>

el codigo script lo colocas luego de donde carga jquery.

prueba en test.

Salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar