2

我在 java 脚本中使用正则表达式来验证全名字段。我需要验证以接受任何[a-z A-Z]字符的 1 个或多个实例,并且该字段必须包含一个-和一个空格字符。

我正在使用的当前正则表达式是:("^[a-zA-Z\\-\\\s]*$");

这个正则表达式允许正确输入我想要的内容,但是,它不会强制用户插入空格和 a - 我需要我的验证才能包括在内。我对正则表达式很陌生,昨天才被介绍给他们,所以我不完全理解某些字符的正确使用。

我也不希望空间和 - 位于字段的开头或结尾,而不是直接相邻。

有效输入示例:

John smi-th
dereK al-jamone
ro-binstanle y

我知道这种验证是不寻常的,但我将非常感谢任何帮助,使我能够更好地理解正则表达式。

4

3 回答 3

1

请检查我是否正确理解您的要求:

  • 一个或多个a-z, A-Z, 空格 (ASCII 32)。正是一个-
  • 空格和连字符-不能在字符串的开头或结尾,但必须有一个空格和一个连字符-,因此字符串必须以字母字符开头和结尾。
  • 连字符-和空格不能相邻。我假设连续的空间和连续-的也是不允许的。

对于上述要求,此正则表达式应验证字符串:

^(?!.*[- ]{2})(?=.* )[a-zA-Z][a-zA-Z ]*-[a-zA-Z ]*[a-zA-Z]$

简短说明:

  • (?!.*[- ]{2}):断言连字符和空格不相邻,并且不允许连续的空格和连字符。

  • (?=.* ): 检查字符串中是否至少有一个空格

  • [a-zA-Z][a-zA-Z ]*-[a-zA-Z ]*[a-zA-Z]:根据我上面的分析,第一个和最后一个字符是字母字符(它们不能在字符串中的同一位置) - 这将隐式禁止空格和连字符。只允许使用 1 个连字符,其余的是任意数量的字母和空格。

您也可以使用多个正则表达式编写此代码 - 代码会稍微清晰一些:

// No hyphen and space at the beginning and the end. Exactly 1 hyphen.
// The string only contains alphabet, space and hyphen
/^[a-zA-Z][a-zA-Z ]*-[a-zA-Z ]*[a-zA-Z]$/.test(str) &&
// Hyphen and space cannot be directly next to each other
// Consecutive hyphens, or consecutive spaces are also disallowed
!/[- ]{2}/.test(str) &&
// At least one space in the string, can be replaced with indexOf
/ /.test(str)
于 2013-01-16T12:19:19.377 回答
0

这是你想要的吗?

^[A-Za-z\s]+(-(?!-)[A-Za-z\s]+)+$
于 2013-01-16T11:49:46.643 回答
0

如果您需要确保只能出现一个空格和一个连字符,那么我会选择检查两个不同的正则表达式,如果任何一个匹配,那么它是有效的......

连字符前的空格...

^[a-zA-Z]*\s.[a-zA-Z]*\-.[a-zA-Z]*$

连字符后有空格

^[a-zA-Z]*\-.[a-zA-Z]*\s.[a-zA-Z]*$

这是一个工作示例

于 2013-01-16T11:56:00.470 回答