我有一个场景,用户必须在单个字段中输入名字和姓氏,因此两个名字之间必须有一个空格,并且空格后必须至少有一个字符。我尝试使用
contains("")
,但是如果用户只输入一个空格并且在该空格之后没有输入任何内容,则此方法返回 true。
请指导我实现这一目标的方法。我也尝试过搜索
Regular Expression
但没有找到。
这是正则表达式和测试:
@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+
),则删除 +
(仍允许单个制表符)或将其替换为空格。
您可以使用这样的代码:
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].*
- 以 至少 一个字符结尾。在修剪字符串后使用“”进行简单的分割即可。
请检查以下代码以获取更多理解:
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]);
}
请检查其他有空格和无空格的场景。这应该会有帮助。
看起来我的解决方案可以轻松处理这个问题
^(?=([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>