我在java脚本中使用正则表达式来验证全名字段。我需要验证接受任何[a-z A-Z]
个字符的1个或多个实例,并且该字段必须包含-
和空格字符。
我正在使用的当前正则表达式为:("^[a-zA-Z\\-\\\s]*$");
这个正则表达式允许我想要的正确输入,但是,它不会强制用户插入空格和 - 我需要我的验证包括。我是正则表达式的新手,昨天才向他们介绍,所以我不完全理解某些字符的正确用法。
我也不希望空格和 - 位于字段的开头或结尾,而不是直接相邻。
有效输入的例子:
John smi-th
dereK al-jamone
ro-binstanle y
我知道这种验证很不寻常,但我非常感谢能帮助我更好地理解正则表达式。
答案 0 :(得分: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)
答案 1 :(得分:0)
这是你想要的吗?
^[A-Za-z\s]+(-(?!-)[A-Za-z\s]+)+$
答案 2 :(得分:0)
如果你需要确保只有一个空格和一个连字符可以存在,那么我会选择检查两个不同的正则表达式,如果匹配则它是有效的...
带有连字符之前的空格......
^[a-zA-Z]*\s.[a-zA-Z]*\-.[a-zA-Z]*$
带有连字符后面的空格
^[a-zA-Z]*\-.[a-zA-Z]*\s.[a-zA-Z]*$