我需要一个带有以下要求的名字的JavaScript正则表达式:
~`?(!^*¨ˆ;@=$%{}[]|\/<>#“.,
我用两个单独的正则表达式做到了: 第一个是:没有数字和无效字符:
^[A-Za-z][^\d~`?!^*¨ˆ;@=$%{}\[\]\|\\\/<>#“.,]*$
第二个不超过3个字:
^[A-Za-z]+( [A-Za-z]+){0,2}$
我需要一个正则表达式来处理上述所有4个条件(或至少3个因为我们可以为第4个条件设置最小长度条件)。
答案 0 :(得分:2)
这是一个符合您要求的正则表达式:
^(?=(?:[^A-Za-z]*[A-Za-z]){2})(?![^\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,]*[\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,])\S+(?: \S+){0,2}$
请参阅demo
<强>说明强>:
^
- 将字符串锚定在开头(?=(?:[^A-Za-z]*[A-Za-z]){2})
- 正面预测,检查字符串中是否至少包含2个英文字符(?![^\d~``?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,]*[\d~``?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,])
- 负面前瞻检查是否没有禁用字符(根据principle of contrast优化)(无法格式化,不得不加倍“”符号)\S{2,}
- 由至少2个字符组成的单词(非空白序列)(?: \S+){0,2}
- 包含至少1个字符的2个字$
- 字符串结束。答案 1 :(得分:0)
我认为你应该定义一组可用的字符。为简单起见假设:
[^0123456789]
并做这样的事情:
定义一个段的最小长度为2
[^0123456789]{2,}
构造只接受1-3个单词的正则表达式:
[^0123456789]{2,}(\s[^0123456789]{2,}(\s[^0123456789]{2,})?)?
答案 2 :(得分:0)
实际上你只需要第一个条件的RegExp。您基本上想要的是除了数字之外只有单词字符的名称,但仍然可能有空格:
[RegularExpression(@"([0-9A-Z]+[\s][0-9A-Z]+)", ErrorMessage="Invalid Card Holder Name")]
public string NameOnCard
{
get
{
return m_strNameOnCard;
}
set
{
m_strNameOnCard = value;
}
}
对于第二个条件,您可以写name.match(/^([a-zA-Z]|\s)$/)
。
对于第三个,它只是name.split(/\s+/).length <= 3
。
第四个是你用name.trim()
为自己解决的问题。
所以要把它们放在一起:
name.length >= 2