Javascript 如何使用正则表达式检查行包含内联sql语句?

Javascript 如何使用正则表达式检查行包含内联sql语句?,javascript,regex,Javascript,Regex,我正在开发代码检查功能,它几乎是使用javascript完成的。我想检查php代码文件是否包含内联sql语句。使用javascript如何做到这一点。试试下面的表达式 // 1st expression (simplest) ^(SELECT|INSERT\sINTO\s|DELETE|UPDATE).+;?$/gi //2nd expression (a better one) ^(?=(SELECT|INSERT|DELETE|UPDATE)+).*(?=(FROM|SET|INTO)+

我正在开发代码检查功能,它几乎是使用javascript完成的。我想检查php代码文件是否包含内联sql语句。使用javascript如何做到这一点。

试试下面的表达式

 // 1st expression (simplest)
^(SELECT|INSERT\sINTO\s|DELETE|UPDATE).+;?$/gi

//2nd expression (a better one)
^(?=(SELECT|INSERT|DELETE|UPDATE)+).*(?=(FROM|SET|INTO)+).*(WHERE|ORDER\sBy|LIMIT)?;?$

//3rd expression (even better)
(?=(SELECT|INSERT|DELETE|UPDATE)+).*(?=(FROM|SET|INTO)+).*(WHERE|ORDER\sBy|LIMIT)?;? 


正在进行测试…:)

你试过什么?这也是一个非常奇怪的用例,所以我不确定我是否理解您试图实现的目标。可能需要为您的问题添加详细信息。是否要使用JavaScript检查PHP文件?嗯?我正在开发代码检查功能(大部分我们都喜欢使用indexOf进行内联css样式检查,使用lenght进行行字符计数)。我想检查代码中是否包含sql语句。我曾尝试对SELECT、FROM、UPDATE、INSERT语句使用indexOf,但这不是解决方案。它给了我错误的结果,因为该文件包含这些单词作为html或在echo中。sql语句也可能有多行。您是否试图保护自己免受sql注入攻击?如果是这样,那就不是这样做的。正则表达式是如何给出您所指示的结果的?您错误地使用了方括号。他们应该是帕伦斯。方括号用来括起一个字符类-一个字符的所有可能值。抛开我对这种方法的其他疑虑,你显然是指
,你有
[
]
。请耐心一点,我看到了漏洞:)嘿@hex4949谢谢!你的解决方案将起作用。我正在检查这个解决方案,它正在处理我的许多文件。@Abhijeet酷!这很有挑战性:)我正在改进它,并测试一些更复杂的字符串
// Strings tested so far using third expression (no fails so far)

SELECT password FROM users WHERE 1
I'd like to select all my best books
WHERE are you?
UPDATE users SET password = "hacked"
We were in group of three
SELECT all elements of something
I'm FROM / from someland
DELETE * FROM users WHERE
I do love regex
SELECT * FROM users WHERE 1;
SELECT password FROM users WHERE 1 LIMIT 1
Insert a freaking coin into machine
INSERT INTO users VALUES
DELETE * FROM users;
DELETE password FROM users LIKE 'admin'
UPDATE users SET password = '' 
OMG!
SELECT Chuck Norris for a president
UPDATE Brian SET tolerance = 'higher'    <--- though, a proper SQL ;)
SELECT * FROM users
Let's check this SELECT user FROM users; whatever
SELECT user FROM users
SELECT user, password FROM users
SELECT * FROM users WHERE user LIKE 'admin'
SELECT * FROM users WHERE user = 'admin'
SELECT user FROM users WHERE password = '' ORDER BY user;
DELETE * FROM users
DELETE FROM users
DELETE FROM users WHERE user = "admin";
UPDATE users SET password = '';
UPDATE users SET username = 'hohoho' AND password = '';
INSERT INTO users VALUES ('santa', 'hohoho');
INSERT INTO users (username, password) VALUES ('santa', 'hohoho');
pattern = /(?=(SELECT|INSERT|DELETE|UPDATE)+).*(?=(FROM|SET|INTO)+).*(WHERE|ORDER\sBy|LIMIT)?;?/gi;
pattern.test('SELECT user, password FROM users'); // true