单个字段中名字和姓氏的正则表达式

问题描述 投票:0回答:4

我有一个场景,用户必须在单个字段中输入名字和姓氏,因此两个名字之间必须有一个空格,并且空格后必须至少有一个字符。我尝试使用

contains("")
,但是如果用户只输入一个空格并且在该空格之后没有输入任何内容,则此方法返回 true。

请指导我实现这一目标的方法。我也尝试过搜索

Regular Expression
但没有找到。

java regex
4个回答
0
投票

这是正则表达式和测试:

@Test
public void test_firstAndLastName_success() {
  Pattern ptrn = Pattern.compile("(\\w+)\\s+(\\w+)");
  Matcher matcher = ptrn.matcher("FirstName  LastName");
  if (matcher.find()) {
    Assert.assertEquals("FirstName", matcher.group(1));
    Assert.assertEquals("LastName", matcher.group(2));
  } else {
    Assert.fail();
  }
}

验证是

matcher
false
上返回
find

如果您不想允许多个空格 (

\s+
),则删除
+
(仍允许单个制表符)或将其替换为空格。


0
投票

您可以使用这样的代码:

public static void main(String[] args) throws IOException {
    String input = "first last";
    if (input.matches("[a-zA-Z]*[\\s]{1}[a-zA-Z].*")) {
        String[] name = input.split(" ");
        System.out.println(Arrays.toString(name));
    } else {
        System.out.println("Please input the valid name.");
    }
}

如果满足以下条件,它将把名字和姓氏放入数组中:

  • [a-zA-Z]*
    - 输入以字符开头;
  • [\\s]{1}
    - 包含仅一个空间;
  • [a-zA-Z].*
    - 以 至少 一个字符结尾。

0
投票

在修剪字符串后使用“”进行简单的分割即可。

请检查以下代码以获取更多理解:

String[] splitter = null;

String s = "abbsd sdsdf"; // string with 2 words and space

    splitter = s.trim().split(" ");

    if(splitter.length!=2){
        System.out.println("Please enter first or last name");
    }
    else{
        System.out.println("First Name : "+splitter[0]);
        System.out.println("Last Name : "+splitter[1]);
    }

    s = "abc"; //string without space

    splitter = s.trim().split(" ");

    if(splitter.length!=2){
        System.out.println("Please enter first or last name");
    }
    else{
        System.out.println("First Name : "+splitter[0]);
        System.out.println("Last Name : "+splitter[1]);
    }

请检查其他有空格和无空格的场景。这应该会有帮助。


0
投票

看起来我的解决方案可以轻松处理这个问题

^(?=([A-ZÀ-ÝŐŰẞŒ]|([a-zß-ÿőűœ][ '])))(?=(?![a-zß-ÿőűœ]+[A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[A-ZÀ-ÝŐŰẞŒ][A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[- '][- ']))[A-ZÀ-ÝŐŰẞŒß-ÿőűœa-z- ']{2,}([a-zß-ÿőűœ]|(, Jr.))$

function myFunction() {
    
  const pattern = "^(?=([A-ZÀ-ÝŐŰẞŒ]|([a-zß-ÿőűœ][ '])))(?=(?![a-zß-ÿőűœ]+[A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[A-ZÀ-ÝŐŰẞŒ][A-ZÀ-ÝŐŰẞŒ]))(?=(?!.*[- '][- ']))[A-ZÀ-ÝŐŰẞŒß-ÿőűœa-z- ']{2,}([a-zß-ÿőűœ]|(, Jr.))$";
    var regex = new RegExp(pattern, 'gm');
    var a = document.getElementById("myText");
  var b = a.value;
  var c = regex.test(b);
  var d = document.getElementById("result") ;
  d.innerHTML = "Result:";
  if(b != ""){
      if(c){
          d.innerHTML += " passed";
      }
      else{
        d.innerHTML += " failed";
        }
  }
  else{
    return
  }
}
input[type=text] {
  width: 99%;
  padding: 4px;
  margin: 8px 0;
  display: inline-block;
  border: 1px solid #ccc;
  box-sizing: border-box;
}
button {
  background-color: #04AA6D;
  color: white;
  padding: 4px;
  border: none;
  cursor: pointer;
  width: 25%;
}

button:hover {
  opacity: 0.8;
}
<h2>Name Validation Regex Pattern </h2>
<div class="container">
      <label for="name"><b>Name</b></label>
        <input type="text" id="myText"  placeholder="Enter Your Name" name="name" value="">
</div>
 <div class="container">

<button onclick="myFunction()">Try it</button>
<p id="result"> Result: </p>
</div>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.