1

我正在寻找一个接受字母的文本字段的正则表达式,也接受点(。),括号,-,&等

A.B.C
ABC (new),
A & A co.
A-abc.

我有我的正则表达式:

/^[A-z.&() ]+$/

代码:

var regex = /^[a-z][a-z.()&-]+$/;
var sel = document.getElementById("TextBoxID").value;
if (sel != "-- Select --") {
if (!regex.test(sel.toString())) {
alert("Please use a proper name.");
}
} return false;

我希望字符串强制以字母开头。但是当我添加 - 时似乎这不起作用,可能是语法错误。

4

1 回答 1

3

首先,请注意 that[A-z]不同,这可能是您的意思。如果您查看ASCII 表,您会看到从到的范围包含几个您可能不打算包含的特殊字符。[A-Za-z]Az

其次,由于破折号-表示字符类中的一个范围(如上所述),它必须最后包含(或第一个,但更常见的是最后一个)才能被解释为文字破折号。

所以,你真正想要的是:

/^[A-Za-z.()&-]+$/

并断言它以字母开头:

/^[A-Za-z][A-Za-z.()&-]*$/
  ^^^^^^^^             ^

(请注意,我已将量词更改+*量词。)

最后,正如@ExplosionPills 所做的那样,您可以通过使其不区分大小写来简化表达式:

/^[a-z][a-z.()&-]*$/i
于 2013-05-02T11:57:15.607 回答