我需要阻止在文本框中输入5个等级序号,如12345,45678等。
我尝试使用以下正则表达式,但它无法正常工作
var regex = /^\(?[0-9]{3}(\-|\)) ?[0-9]{3}-[0-9]{4}$/;
答案 0 :(得分:8)
最好对这类任务使用非正则表达式方法。您可以使用 static void getHighScores() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
return;
}
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe", "STUDENT", "STUDENT");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM HIGHSCORE ");
System.out.println("Top Players");
while (rs.next())
System.out.println(rs.getString(1) + " " + rs.getInt(2));
connection.close();
} catch (Exception e)
{
System.out.println(e);
}
}
轻松完成此操作。这些模式的正则表达式变得非常复杂且不可读。
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe", "STUDENT", "STUDENT");
答案 1 :(得分:1)
在搜索功能中使用Tilde (~)
运算符的另一种方法。在~
上使用-1
会将其转换为0
。数字0是一个falsy值,这意味着当转换为布尔值时它将计算为false。任何不虚假的东西都是真实的。
const input = 12345;
const pattern = '0123456789012345789';
if (~pattern.indexOf(input))
console.log('pattern in input');
else
console.log('pattern not in input');
或者您可以使用includes()
方法:
const input = 12345;
const pattern = '0123456789012345789';
if (pattern.includes(input))
console.log('pattern in input');
else
console.log('pattern not in input');
答案 2 :(得分:0)
单一的正则表达方式。 (虽然它有点大而且丑陋):
var mRreg = /^\(?(?!.*(?:0\D?1\D?2\D?3\D?4|1\D?2\D?3\D?4\D?5|2\D?3\D?4\D?5\D?6|3\D?4\D?5\D?6\D?7|4\D?5\D?6\D?7\D?8|5\D*6\D*7\D*8\D*9|6\D*7\D*8\D*9\D*0|7\D*8\D*9\D*0\D*1|8\D*9\D*0\D*1\D*2|9\D*0\D*1\D*2\D*3))([0-9]{3})(?:\-|\)) ?([0-9]{3})-([0-9]{4})$/;
if(mRreg.test(input))
console.log('ok');
else
console.log('not ok');
这将匹配:
143-457-6543
(555) 234-5556
但是没赢得比赛:
123-456-7890
987-456-7845
(987)456-7890