我想要一个只接受字母,连字符,撇号,下划线的正则表达式。 我试过了
/^[ A-Za-z-_']*$/
但它不起作用。请帮忙。
答案 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})?)*+$";