Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

[asp.net MVC] tách và gọp họ tên

09:40 16-04-2023 636 lượt xem 2 bình luận

có cách nào gọp họ và tên lại thành fullName để người dùng nhập họ tên vào 1 textbox và sau đó tách full name ra thành firstName và lastName rồi lưu vào db ko ạ?

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 11:12 26-04-2023

Có thể sử dụng ASP.NET MVC để tạo một trang web cho phép người dùng nhập họ tên vào một ô textbox và sau đó tách họ tên thành tên và họ và lưu vào database.

Dưới đây là một ví dụ về cách thực hiện điều này trong ASP.NET MVC:

  1. Tạo một Model để lưu thông tin về người dùng:
public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Tạo một trang web cho phép người dùng nhập họ tên vào một ô textbox:

@using (Html.BeginForm())
{
    <div class="form-group">
        @Html.LabelFor(model => model.FullName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.FullName, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.FullName, "", new { @class = "text-danger" })
        </div>
    </div>
}

Tạo một Action trong Controller để xử lý việc lưu thông tin người dùng

[HttpPost]
public ActionResult Save(User user)
{
    // Tách họ tên thành tên và họ
    string[] nameParts = user.FullName.Split(' ');
    user.FirstName = nameParts[0];
    user.LastName = nameParts[1];

    // Lưu thông tin người dùng vào database ở đây

    return View(user);
}

Trong ví dụ trên, Save là Action sẽ được gọi khi người dùng nhấn nút "Lưu". Trong Action này, chúng ta sử dụng phương thức Split để tách họ tên thành tên và họ. Sau đó, chúng ta có thể lưu thông tin người dùng vào database hoặc thực hiện các xử lý khác tùy thuộc vào yêu cầu của ứng dụng.

Chú ý rằng cách tách họ tên thành tên và họ có thể khác nhau tùy vào quy định đặt tên của từng quốc gia hoặc văn hóa. Việc này có thể được giải quyết bằng cách tùy chỉnh mã nguồn theo yêu cầu của ứng dụng.

phucprotein đã bình luận 16:08 17-04-2023

Bạn có thể sử dụng regular expression (regex) để validation chuỗi nhập vào của người dùng và tách firstName với lastName nhé. Tuỳ nhu cầu của bạn pattern có thể khác nhau đây là một ví dụ nhé

string firstName = "";
string lastName = "";

Match match = Regex.Match(fullName, @"^\s*(?<firstName>(\S+\s+)+)?(?<lastName>\S+)\s*$");
if (match.Success)
{
    firstName = match.Groups["firstName"].Success ? match.Groups["firstName"].Value.Trim() : "";
    lastName = match.Groups["lastName"].Value;
}

Giải thích:

  • ^ : bắt đầu chuỗi
  • \s* : 0 hoặc nhiều khoảng trắng ở đầu chuỗi
  • (?<firstName>(\S+\s+)+)? : 0 hoặc 1 lần khớp với một chuỗi tên đầu tiên, tên đầu tiên có thể bao gồm nhiều từ (được phân tách bằng khoảng trắng) được lặp lại 1 hoặc nhiều lần. Biểu thức (\S+\s+)+ có nghĩa là khớp với một từ không chứa khoảng trắng (\S+) và theo sau là 1 hoặc nhiều khoảng trắng (\s+). Dấu ngoặc đơn (?<firstName>...) được sử dụng để gán nhãn cho phần khớp này với tên là "firstName".
  • (?<lastName>\S+) : khớp với một chuỗi họ, chuỗi họ chỉ chứa các ký tự không phải khoảng trắng (\S+). Dấu ngoặc đơn (?<lastName>...) được sử dụng để gán nhãn cho phần khớp này với tên là "lastName".
  • \s* : 0 hoặc nhiều khoảng trắng ở cuối chuỗi
  • $ : kết thúc chuỗi

Ví dụ

using System.Text.RegularExpressions;

static (string, string) SplitFullName(string fullName)
{
    string firstName = "";
    string lastName = "";

    Match match = Regex.Match(fullName, @"^\s*(?<firstName>(\S+\s+)+)?(?<lastName>\S+)\s*$");
    if (match.Success)
    {
        firstName = match.Groups["firstName"].Success ? match.Groups["firstName"].Value.Trim() : "";
        lastName = match.Groups["lastName"].Value;
    }

    return (firstName, lastName);
}
string[] testCases = {
    "Lã Minh Phúc",
    "  Nguyễn   Văn   A  ",
    " Bùi Văn Hùng ",
    "  Trần Thị B   ",
    " Phúc ",
    "     "
};

foreach (string testCase in testCases)
{
    (string firstName, string lastName) = SplitFullName(testCase);
    Console.WriteLine("{0} -> First name: {1}, Last name: {2}", testCase, firstName, lastName);
}
Lã Minh Phúc -> First name: Lã Minh, Last name: Phúc
  Nguyễn   Văn   A   -> First name: Nguyễn   Văn, Last name: A
 Bùi Văn Hùng  -> First name: Bùi Văn, Last name: Hùng
  Trần Thị B    -> First name: Trần Thị, Last name: B
 Phúc  -> First name: , Last name: Phúc
      -> First name: , Last name: 

 

Câu hỏi mới nhất