1

I am trying to write a regular expression in JavaScript. I need to validate name and version, with the following conditions:

Name:

  • Only alphabets, No numbers and special characters
  • No trailing spaces at start or end, and no multiple spaces between words.
  • Minimum of 3 and Maximum of 50 characters.

Version:

  • Format should be [number].[number].[number]
  • Only a single dot between numbers (1.3..4 is invalid, 1.3.4 is ok)
  • Each number can be of 1 or 2 digits, like 1.11.26(valid), but not 2.343.23 (Invalid)
4

1 回答 1

9

姓名

正则表达式

^(?! )((?!  )(?! $)[a-zA-Z ]){3,50}$
  • 只有字母,没有数字和特殊字符 => 我们为此使用字符类

    [a-zA-Z]
    
  • 开头或结尾没有尾随空格,单词之间没有多个空格。=>通过“锚定”正则表达式,我们说它应该是唯一的东西,它不能部分匹配。对于负前瞻,我们说不允许超过 2 个空格

    ^...$
    (?!  )
    
  • 开头和结尾没有空格=>我们可以再次使用一些环视

    ^(?! )...(?<! )$
    

    但是由于javascript不支持lookbehind我们必须使用lookahead

    (?! $)[a-zA-Z ]
    
  • 最少 3 个字符,最多 50 个字符。

    {3,50}
    

版本

正则表达式

^\d{1,2}\.\d{1,2}\.\d{1,2}$
  • 格式应为 [number].[number].[number]

    \d+\.\d+\.\d+
    
  • 数字之间只有一个点(1.3..4 无效,1.3.4 可以)=> 通过指定 \d 我们说只允许数字后跟一个点(应该转义,否则它将意味着任何字符)

  • 每个数字可以是 1 位或 2 位数字,例如 1.11.26(有效),但不能是 2.343.23(无效)

    \d{1,2}
    

最后一个正则表达式在javascript中变为以下

if (/^\d{1,2}\.\d{1,2}\.\d{1,2}$/.test(subject)) {
    // Successful match
} else {
    // Match attempt failed
}
于 2012-06-06T10:23:25.700 回答