在javascript中使用正则表达式强制特定字符输入

时间:2013-01-16 11:43:53

标签: javascript regex

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

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

这个正则表达式允许我想要的正确输入,但是,它不会强制用户插入空格和 - 我需要我的验证包括。我是正则表达式的新手,昨天才向他们介绍,所以我不完全理解某些字符的正确用法。

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

有效输入的例子:

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

我知道这种验证很不寻常,但我非常感谢能帮助我更好地理解正则表达式。

3 个答案:

答案 0 :(得分:1)

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

  • a-zA-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]*$

Here is a working example