正则表达式仅用于字母,下划线,连字符,撇号

时间:2014-02-10 12:42:02

标签: regex

我想要一个只接受字母,连字符,撇号,下划线的正则表达式。 我试过了

/^[ A-Za-z-_']*$/

但它不起作用。请帮忙。

5 个答案:

答案 0 :(得分:4)

你的正则表达式错了。试试这个:

/^[0-9A-Za-z_@'-]+$/

OR

/^[\w@'-]+$/

连字符需要位于字符类中的第一个或最后一个位置以避免转义。如果不允许空字符串,则使用+(1或更多)代替*(0或更多)

<强>解释

^ assert position at start of the string
[\w@'-]+ match a single character present in the list below
Quantifier: Between one and unlimited times, as many times as possible
\w match any word character [a-zA-Z0-9_]
@'- a single character in the list @'- literally
$ assert position at end of the string

答案 1 :(得分:4)

在字符类的末尾或开头移动连字符或将其转义:

^[ A-Za-z_'-]*$

^[- A-Za-z_']*$

^[ A-Za-z\-_']*$

如果你想要所有的信件:

^[ \pL_'-]*$

答案 2 :(得分:0)

在字符类中使用连字符时,请务必将其作为最佳实践放在字符类的末尾。

原因是因为连字符用于表示字符类中字符的范围,当它在类的末尾时,它不会创建任何范围。 / p>

答案 3 :(得分:0)

我最好的选择是:

   /[A-Za-z-\'_@0-9]+/g

答案 4 :(得分:0)

您可以使用以下(在Java中):

String acceptHyphenApostropheUnderscoreRegEx = "^(\\p{Alpha}*+((['_-]+)\\p{Alpha})?)*+$";

如果你想要空格和@也(如上面给出的那样)尝试:

String acceptHyphenApostropheUnderscoreRegEx = "^(\\p{Alpha}*+((\\s|['@_-]+)\\p{Alpha})?)*+$";