使用regEx

时间:2019-02-27 01:12:57

标签: javascript regex

我想使用点表示法(任何字母或数字以及_$,只要它可以快速检查字符串是否可以用作属性名称不是以数字开头),显然如果使用了括号符号,那么一切都有效。

我一直在试图找到一个regEx解决方案,但是我对regEx的了解不是很好。我认为我当前的模式将允许使用字母,数字,$_,但是我不知道如何禁止以数字开头

function validName(str){
    // check if str meets the requirements 
    return /^[a-zA-Z0-9$_]+$/.test(str);
}

validName("newName")    // should return TRUE
validName("newName32")  // should return TRUE
validName("_newName")   // should return TRUE
validName("4newName")   // should return FALSE
validName("new Name")   // should return FALSE
validName("")           // should return FALSE

4 个答案:

答案 0 :(得分:3)

添加负面的前瞻就足够了。

^(?![0-9])[a-zA-Z0-9$_]+$

Test

function validName(str) {
  // check if str meets the requirements 
  return /^(?![0-9])[a-zA-Z0-9$_]+$/.test(str);
}

console.log(validName("newName")) // should return TRUE
console.log(validName("newName32")) // should return TRUE
console.log(validName("_newName")) // should return TRUE
console.log(validName("4newName")) // should return FALSE
console.log(validName("new Name")) // should return FALSE
console.log(validName("")) // should return FALSE

答案 1 :(得分:2)

由于\w涵盖了[a-zA-Z0-9_]\d涵盖了[0-9],您可以使用此正则表达式:

const validName = str => /^(?!\d)[\w$]+$/.test(str);

console.log(validName("newName")) // should return TRUE
console.log(validName("newName32")) // should return TRUE
console.log(validName("_newName")) // should return TRUE
console.log(validName("4newName")) // should return FALSE
console.log(validName("new Name")) // should return FALSE
console.log(validName("")) // should return FALSE

答案 2 :(得分:1)

您可以将模式的第一个字符设置为相同的字符集,但不包括数字:

Counter counter = new Counter(); List<CounterThread> counterThreads = new ArrayList<>(); for (int i = 0; i < 3; i++) { counterThread.add(new CounterThread(counter)); } // start in a loop after constructing them all which improves the overlap chances for (CounterThread counterThread : counterThreads) { counterThread.start(); } // wait for them to finish for (CounterThread counterThread : counterThreads) { counterThread.join(); } // print the results for (CounterThread counterThread : counterThreads) { System.out.println(counterThread.result); }

答案 3 :(得分:1)

在解决这种正则表达式时,我建议使用regexr.com

此摘要应解决您的问题。

function validName(str){
    // check if str meets the requirements
    return /^[^0-9][a-zA-Z0-9$_]+$/.test(str)
}

console.log(validName("newName"))   // TRUE
console.log(validName("newName32")) // TRUE
console.log(validName("_newName"))  // TRUE
console.log(validName("4newName"))  // FALSE
console.log(validName("new Name"))  // FALSE
console.log(validName(""))          // FALSE