针对特定条件的Javascript Regex验证器

时间:2015-06-01 04:43:33

标签: javascript regex validation

我需要一个javascript正则表达式验证程序,它可以完全满足以下条件。

  1. 字符串应仅包含字母和空格。
  2. 第一个字符必须是字母(小写或大写)。
  3. 允许使用空格,但不是强制性的。
  4. 不应重复空间。但是字符串中可以有多个空格。
  5. 最后一个字符必须是字母(小写或大写)。
  6. 提前致谢。

3 个答案:

答案 0 :(得分:2)

由于现有的答案存在灾难性的回溯问题,或者过于复杂,这是一个更简单的解决方案:

Unable to load library encrypt.dll

我将/^[a-zA-Z]+(?: [a-zA-Z]+)*$/.test(input) 更改为一个简单的空格,因为\s匹配空格,制表符,换行符以及其他字符。

附录

solution有灾难性的回溯问题:

\s

您可以尝试使用简单的失败字符串。例如:

/^(?:[a-zA-Z]+\s?)*[a-zA-Z]$/

问题是由于可选/^(?:[a-zA-Z]+\s?)*[a-zA-Z]$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8") 导致\s退化为(?:[a-zA-Z]+\s?)*,这是典型的灾难性回溯模式(?:[a-zA-Z]+)*

答案 1 :(得分:1)

你可以尝试这个:

var re = /^(?:[a-zA-Z]+\s)*[a-zA-Z]+$/

re.test('a')     // true
re.test('ab')    // true
re.test('a b')   // true
re.test('a b c') // true
re.test('a  b')  // false
re.test('ab ')   // false
re.test(' ab')   // false
re.test('ab1')   // false

答案 2 :(得分:0)

var re = /(([a-zA-Z]+\s*)*[a-zA-Z]+)+/i; 
var str = 'sample test';
var m;

if ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

了解或修改check out playground here