Javascript 带某些条件的名正则表达式
我需要一个JavaScript正则表达式作为名字,并满足以下要求:Javascript 带某些条件的名正则表达式,javascript,regex,Javascript,Regex,我需要一个JavaScript正则表达式作为名字,并满足以下要求: 没有数字,以下字符无效:~`?(!^*;ˆ;@=$%{}[]\/\\”, 不应超过3个单词 没有前面或后面的空格 最少2个字符 我使用了两个单独的正则表达式: 第一个是:对于无数字和无效字符: ^[A-Za-z][^\d~`?!^*¨ˆ;@=$%{}\[\]\|\\\/<>#“.,]*$ 我需要一个正则表达式来处理上述所有4个条件(或者至少3个,因为我们可以为第4个条件设置最小长度条件)。我认为您应该定义一组可用字
~`?(!^*;ˆ;@=$%{}[]\/\\”,
^[A-Za-z][^\d~`?!^*¨ˆ;@=$%{}\[\]\|\\\/<>#“.,]*$
我需要一个正则表达式来处理上述所有4个条件(或者至少3个,因为我们可以为第4个条件设置最小长度条件)。我认为您应该定义一组可用字符。为简单起见,假设:
[^0123456789]
这样做:
定义一段最小长度为2
[^0123456789]{2,}
构造只接受1-3个单词的正则表达式:
[^0123456789]{2,}(\s[^0123456789]{2,}(\s[^0123456789]{2,})?)?
实际上,对于第一个条件,您只需要一个RegExp。您基本上想要的是除了数字之外,名称只包含单词字符,但可能还有空格:
name.match(/^([a-zA-Z]|\s)$/)
对于第二个条件,您可以编写name.split(/\s+/).length=2
总而言之:
var name = " JOe John Thomas ";
name = name.trim();
if (name.match(/^([a-zA-Z]|\s)$/) && name.split(/\s+/).length <= 3 && name.length >=2) {
console.log("name is valid!");
}
var name=“乔·约翰·托马斯”;
name=name.trim();
if(name.match(/^([a-zA-Z]|\s)$/)和&name.split(/\s+/).length=2){
log(“名称有效!”);
}
这是一个符合您要求的正则表达式:
^(?=(?:[^A-Za-z]*[A-Za-z]){2})(?![^\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,]*[\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,])\S+(?: \S+){0,2}$
(?:[^A-Za-z]*[A-Za-z]){2}(?![^\d~`?!^*;@=$%{}\[\]\\\\\\\\/\\\\\\\\/\\\\\”,[\d~`?!^*;@=$%{\\\[\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$
看
说明:
-将字符串锚定在开头^
-检查字符串中是否至少有2个英文字符的正向前瞻(?=(?:[^A-Za-z]*[A-Za-z]){2}
-如果没有禁止字符(根据优化)(无法很好地格式化,必须加倍“`”符号)(?![^\d~`?!^*.@=$%{}\[\]\\\\\\/\\\\\\\\\/\\\\”,]*[\d~`?!^*.@=$%{}\[\\\\\\\\\\\\\\/\\\\\\\\\\”,])
-至少由2个字符组成的单词(一个非空白序列)\S{2,}
-由至少1个字符组成的2个单词(?:\S+{0,2}
-字符串结束$
^[A-Z]([A-Za-Z])+(\s[A-Za-Z]{2,}){0,2}$
够了吗?@Amit我认为至少2个字符是总数,而不是每个单词。@Mahesh:请提供有效和无效的输入示例。是的,总共至少2个字符。您可以使用[^0-9]
,您不必指定每个字符。请使用范围。另外,我希望使用白名单而不是黑名单:[a-z\-]
。最终结果应该是这样的:/[a-z\-]{2,}(\s[a-z\-]{2,})?\s[a-z\-]{2,})?)/i
我故意使用这个表单,因为@Mahesh定义了他不想使用的字符,至少两个字符代表整个名字。所以它可能是AB,A B。好的,我用+
替换{0,2}
。现在,它应该接受AB A B
。我想\S{2,}不符合要求。全名应至少包含两个字符。例如全名=A麻烦示例:全名=A B C全名=麦克·罗杰Shane全名=A Mack C全名=A B Mack全名=约翰B C全名=约翰·麦克请检查更新,我添加了至少两个英文字母的检查。
^(?=(?:[^A-Za-z]*[A-Za-z]){2})(?![^\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,]*[\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,])\S+(?: \S+){0,2}$