Javascript Regex接受带有空格但没有特殊字符的名字和姓氏

Javascript Regex接受带有空格但没有特殊字符的名字和姓氏,javascript,regex,Javascript,Regex,所以我尝试使用正则表达式来接受名字和姓氏,但是名字和姓氏是必须的。 除-和、和之外,不允许使用特殊字符。而且 我还想让名字和姓氏最小长度各2个字符 一些例子。 无效-名 无效-姓氏 无效-f lastname 无效-名为l 有效-firstname lastname 有效-f-name lastname 有效-fname l'name 我有这个正则表达式 (.*)([A-Za-z,.-]){2}([A-Za-z,.-]){2}(.*)除了排除其他特殊字符(如!@等 我认为问题是因为我们必须将名字

所以我尝试使用正则表达式来接受名字和姓氏,但是名字和姓氏是必须的。 除-和、和之外,不允许使用特殊字符。而且 我还想让名字和姓氏最小长度各2个字符

一些例子。 无效-名

无效-姓氏

无效-f lastname

无效-名为l

有效-firstname lastname

有效-f-name lastname

有效-fname l'name

我有这个正则表达式
(.*)([A-Za-z,.-]){2}([A-Za-z,.-]){2}(.*)
除了排除其他特殊字符(如!@等 我认为问题是因为我们必须将名字和姓氏的最小长度与上面的正则表达式中可以接受的字符相匹配。 但通过排除其他特殊字符,它本质上颠倒了逻辑

这是我的

对于那些感兴趣的人,我使用了两个正则表达式匹配来解决这个问题。 第二个正则表达式用于多个允许的特殊字符


谢谢@tshiono的帮助。

请尝试以下方法:

^[A-Za-z,.'-]{2,} +[A-Za-z,.'-]{2,}$

如果希望名字和姓氏不以特殊字符开头,请尝试:

^[A-Za-z][A-Za-z,.'-]+ +[A-Za-z][A-Za-z,.'-]+$
[更新]
至于分叉要求不重复特殊字符,那么:

^(?:(?:[A-Za-z]|([,.'-]))(?!(?:.*?\1))){2,} +(?:(?:[A-Za-z]|([,.'-]))(?!(?:.*?\2))){2,}$

请尝试以下操作:

^[A-Za-z,.'-]{2,} +[A-Za-z,.'-]{2,}$

如果希望名字和姓氏不以特殊字符开头,请尝试:

^[A-Za-z][A-Za-z,.'-]+ +[A-Za-z][A-Za-z,.'-]+$
[更新]
至于分叉要求不重复特殊字符,那么:

^(?:(?:[A-Za-z]|([,.'-]))(?!(?:.*?\1))){2,} +(?:(?:[A-Za-z]|([,.'-]))(?!(?:.*?\2))){2,}$

嗨,齐奥诺,这似乎不起作用:(请检查我的regexr链接好的,我需要在验证中反转逻辑,似乎起到了作用。非常感谢:)谢谢你的反馈。请尝试检查多行标志。有趣的问题!我会试着找出正则表达式,但它可能不清楚。从可维护性的角度来看,最好在单独的代码中计算特殊字符的出现次数,尽管这可能不是一个优雅的解决方案。我已经用正则表达式更新了我的答案,它将支持分叉需求。我希望这是你想要的。BR.嗨,齐奥诺,这似乎不起作用:(请检查我的regexr链接,好的,我需要在验证中反转逻辑,似乎起了作用。非常感谢:)谢谢你的反馈。请尝试检查多行标志。有趣的问题!我会试着找出正则表达式,但它可能不清楚。从可维护性的角度来看,最好在单独的代码中计算特殊字符的出现次数,尽管这可能不是一个优雅的解决方案。我已经用正则表达式更新了我的答案,它将支持分叉需求。我希望这是你想要的。比尔。