繁体   English   中英

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

[英]Forcing specific character input using regex in javascript

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

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

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

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

有效输入的示例:

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

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

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

  • azAZ ,空格(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)

这是你想要的吗?

^[A-Za-z\s]+(-(?!-)[A-Za-z\s]+)+$

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

连字符前的空格...

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

连字符后的空格

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

这是一个有效的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM