在这个正则表达式中加入"减号",怎么样?

32 html javascript regex security validation

我有这个正则表达式:

  var alphaExp = /^[a-zA-ZåäöÅÄÖ\s]+$/;
Run Code Online (Sandbox Code Playgroud)

这是表单验证中的名称字段.

我需要输入像"Anna-nicole"这样的名字(注意减号).目前,减号会导致错误.

我需要重新制作这个正则表达式,以便在名称中包含减号; 最好是我应该这样做,以便名称也不能以减号开头,或以一个减号结束.只允许在"单词或名称"之间使用减号.

有人知道怎么做这个吗?

顺便说一句,它是JavaScript.

Emi*_*l H 47

你必须使用反斜杠转义减号.

var alphaExp = /^[a-zA-ZåäöÅÄÖ\s\-]+$/;
Run Code Online (Sandbox Code Playgroud)

要阻止他们在开头或结尾使用它,请尝试以下方法:

var alphaExp = /^[a-zA-ZåäöÅÄÖ\s]+[a-zA-ZåäöÅÄÖ\s\-]*[a-zA-ZåäöÅÄÖ\s]+$/;
Run Code Online (Sandbox Code Playgroud)

  • 可能值得注意的是 a) 减号应该放在开头或结尾 b) 在许多正则表达式实现中不需要转义它 (2认同)

Jon*_*ler 18

在许多正则表达式方言中,在一个字符类中,一个简单的连字符/减号需要是第一个或最后一个:

/^[-a-zA-ZåäöÅÄÖ\s]+$/
/^[a-zA-ZåäöÅÄÖ\s-]+$/
Run Code Online (Sandbox Code Playgroud)

否定的角色类:

/^[^-a-zA-ZåäöÅÄÖ\s]+$/
/^[^a-zA-ZåäöÅÄÖ\s-]+$/
Run Code Online (Sandbox Code Playgroud)

使用紧密的方括号,将方括号放在前面,连字符放在末尾:

/^[]a-zA-ZåäöÅÄÖ\s-]+$/
Run Code Online (Sandbox Code Playgroud)

如果您需要排除方括号和连字符,则:

/^[^]a-zA-ZåäöÅÄÖ\s-]+$/
Run Code Online (Sandbox Code Playgroud)

对于这个问题,一种解释可能是:你想坚持连字符周围的字母字符,并且只想在开头和结尾允许空格,你可能想要允许使用连字符的撇号,并且你想要避免连续连字符或撇号.

/^\s*[a-zA-ZåäöÅÄÖ]*([a-zA-ZåäöÅÄÖ]+[-'][a-zA-ZåäöÅÄÖ]+)*\s*$/
Run Code Online (Sandbox Code Playgroud)

警告:使用Perl正式测试正则表达式,而不是JavaScript.

字符串的开头,零个或多个空格; 零个或多个字母字符; 零个或多个'一个或多个字母字符加连字符或撇号和一个或多个字母字符'的序列,后跟字符串结尾.您可以在第一个\s*和第二个之后拍一组额外的括号\s*以捕获整个名称.

因为Anna-nicole,第一个alpha术语将匹配Ann,而另一个alpha术语将匹配a-nicole.因为Anonymous,第一个术语将匹配整个字符串,第二个术语将为空.因为O'Reilly,第一个术语是空的,第二个术语匹配整个字符串.诸如"C-d"和"Who''Me"之类的名称将被拒绝(不允许重复连字符或撇号).它将允许Smith-Jones-and-Son作为名称,和Smith-And-O'Reilly.它不允许使用前导或尾随连字符或撇号.

如果你想允许'名字姓氏',你需要两个上面正则表达式的'核心' \s+.等等.