Pregunta javascript regex, nombre completo del usuario dividido


Tengo el nombre y apellido del usuario en una cadena, con espacio entre p.ej.
John Doe
Peter Smithon 

Y ahora quiero convertir esta cadena en dos cadenas: nombre y apellido
John Doe -> primero = John, último = Doe
John -> primero = John, last = ""
[space]Doe -> first = "", last = Doe.

Estoy usando el siguiente código

var fullname = "john Doe"
var last = fullname.replace(/^.*\s/, "").toUpperCase().trim(); // john
var first = fullname.replace(/\s.*$/, "").toUpperCase().trim(); // Doe  

y esto funciona bien para el nombre completo de dos palabras. Pero si fullname tiene una palabra, entonces tengo un problema

var fullname = "john"  
var last = fullname.replace(/^.*\s/, "").toUpperCase().trim(); // john
var first = fullname.replace(/\s.*$/, "").toUpperCase().trim(); // john  

http://jsfiddle.net/YyCKx/
¿algunas ideas?


5
2017-10-24 08:23


origen


Respuestas:


Utilice los métodos de división + cambio.

var parts = "Thomas Mann".split(" "),
    first = parts.shift(),
    last = parts.shift() || "";

Entonces, en el caso de un solo nombre de palabra, obtendrá el resultado esperado

last = "";

8
2017-10-24 08:26



Usa este código:

Deberá cambiar la línea: splitFullName ("firstName", "lastName", "fullName"); y asegúrese de que incluya las ID de campo correctas de su formulario.


function splitFullName(a,b,c){
   String.prototype.capitalize = function(){
   return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
  };
document.getElementById(c).oninput=function(){
    fullName = document.getElementById(c).value;
    if((fullName.match(/ /g) || []).length ===0 || fullName.substring(fullName.indexOf(" ")+1,fullName.length) === ""){
        first = fullName.capitalize();;
        last = "null";
    }else if(fullName.substring(0,fullName.indexOf(" ")).indexOf(".")>-1){
        first = fullName.substring(0,fullName.indexOf(" ")).capitalize() + " " + fullName.substring(fullName.indexOf(" ")+1,fullName.length).substring(0,fullName.substring(fullName.indexOf(" ")+1,fullName.length).indexOf(" ")).capitalize();
        last = fullName.substring(first.length +1,fullName.length).capitalize();
    }else{
        first = fullName.substring(0,fullName.indexOf(" ")).capitalize();
        last = fullName.substring(fullName.indexOf(" ")+1,fullName.length).capitalize();
    }
    document.getElementById(a).value = first;
    document.getElementById(b).value = last;
};
//Initial Values
if(document.getElementById(c).value.length === 0){
    first = document.getElementById(a).value.capitalize();
    last = document.getElementById(b).value.capitalize();
    fullName =  first + " " + last ;
    console.log(fullName);
    document.getElementById(c).value = fullName;}}

     //Replace the ID's below with your form's field ID's
     splitFullName("firstName","lastName","fullName");

Fuente: http://developers.marketo.com/blog/add-a-full-name-field-to-a-marketo-form/


1
2017-12-22 16:27



Puedes usar split método

    var string = "ad";
var arr = string.split(" ");
var last = arr[0];
var first = arr[1];
if(first == null){
    first = "";
}
alert(last + "\n" + first)​;​

0
2017-10-24 08:28



Si en cada situación tienes "primero el último" podrías usar:

       var string = "john "
       var i = string.split(" ");
       alert("first: "+i[0]+ "\n"+ "last: " + i[1]);

0
2017-10-24 08:31



var str = 'John';

var str2 = 'Peter Smithon';

var str3 = 'Peter';

var words = str.split (/ \ s + / g, 2);

var first = words [0];

var last = words [1] || '';

alerta (primero + '' + último);


0
2017-10-24 10:18



Sé que esto ya ha sido respondido y marcado como contestado, pero solo quiero señalar que si aún desea usar expresiones regulares puede cambiar la expresión "última":

var last = string.replace(/^[a-zA-Z]*/, "").toUpperCase().trim();

0
2017-10-24 11:07



jQuery( window ).load(function() {
            jQuery("#FullNametest").change(function(){
                var temp = jQuery(this).val();
                var fullname = temp.split(" ");
                var firsname='';
                var middlename='';
                var lastname = '';
                firstname=fullname[0];
                lastname=fullname[fullname.length-1];

                for(var i=1; i < fullname.length-1; i++) 
                {
                   middlename =  middlename +" "+ fullname[i];
                }
                jQuery('#FirstName').val(firstname);
                jQuery('#LastName').val(lastname);
            });
        });

0
2018-06-03 10:54