ตัวอักษรและตัวเลขขีดกลางและขีดล่าง แต่ไม่เว้นวรรคนิพจน์ทั่วไปตรวจสอบ JavaScript


92

พยายามตรวจสอบอินพุตเทียบกับนิพจน์ทั่วไป

ช่องนี้ควรอนุญาตเฉพาะอักขระที่เป็นตัวเลขและตัวอักษรขีดกลางและขีดล่างเท่านั้นและไม่ควรเว้นวรรค

อย่างไรก็ตามโค้ดด้านล่างอนุญาตให้เว้นวรรค

ฉันขาดอะไรไป?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
ฉันชอบคำตอบของ Andy E ด้านล่าง นอกจากนี้คุณอาจต้องการชำระเงินgskinner.com/RegExrเพื่อแก้ไข regex อย่างรวดเร็ว มัน ... สวยหวาน
pixelbobby

คำตอบ:


155

อย่างไรก็ตามโค้ดด้านล่างอนุญาตให้เว้นวรรค

ไม่มันไม่ได้ อย่างไรก็ตามจะจับคู่กับอินพุตที่มีความยาว 1 เท่านั้นสำหรับอินพุตที่มีความยาวมากกว่าหรือเท่ากับ 1 คุณต้องมี+คลาสอักขระต่อไปนี้:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

โปรดทราบว่าทั้ง-(ในกรณีนี้) หรือความ_ต้องการไม่หลบหนี


16

คุณไม่ควรใช้ String.matchแต่เป็น RegExp.prototype.test (ie /abc/.test("abcd")) แทน String.search () หากคุณสนใจเฉพาะค่าบูลีน คุณต้องทำซ้ำคลาสตัวละครของคุณตามที่ Andy E อธิบายไว้ในคำตอบ:

var regexp = /^[a-zA-Z0-9-_]+$/;

8
จริงๆแล้วคุณควรใช้RegExp.prototype.testวิธีนี้หากคุณสนใจบูลีนเท่านั้น
Andy E

7

ไวยากรณ์นี้กระชับกว่าคำตอบที่โพสต์ไว้ในจุดนี้เล็กน้อยและได้ผลลัพธ์เดียวกัน:

let regex = /^[\w-]+$/;

1
พิจารณาเพิ่มหมายเหตุว่าคำตอบของคุณใช้ได้กับอักขระสากลด้วย ฉันไม่แน่ใจใน JavaScript แต่ในการใช้งาน bash นี้: `echo" abc-def däf_ghi "| egrep -wo '(\ w | - | _) +'
Ivan Ogai

4

มีข้อผิดพลาดโง่ ๆ ดังนั้นโพสต์ที่นี่ถ้าใครพบว่ามีประโยชน์

  1. -\._ - หมายถึงยัติภังค์จุดและขีดล่าง
  2. \.-_ - หมายถึงสัญญาณทั้งหมดในช่วงตั้งแต่จุดถึงขีดล่าง

# 2 ใช้ได้เฉพาะในกรณีที่อยู่ในวงเล็บเหลี่ยมเช่น [\.-_] เป็นอักขระที่อยู่ในช่วงจากจุดถึงขีดล่าง แต่ถ้าไม่มีวงเล็บเหลี่ยมทั้งสองจะเป็นลำดับของสัญลักษณ์สามแบบ
เขียน

1

อย่าหนีขีดล่าง อาจก่อให้เกิดการอิดโรยบ้าง


1
ทำไมคุณพูดแบบนั้น? ฉันรู้ว่าขีดล่างไม่จำเป็นต้องใช้ Escape แต่ฉันไม่เคยได้ยินว่า\_ก่อให้เกิดปัญหาใน JavaScript หรือรสชาติ regex อื่น ๆ
Alan Moore

1
การเก็งกำไรที่บริสุทธิ์ นิพจน์นี้ดูดีและไม่ควรจับคู่ช่องว่างไม่ว่าในกรณีใด ๆ แต่ฉันแค่โยนมันออกไป น่าจะเป็นความคิดเห็นที่ไม่ใช่คำตอบ
David Fells

1

ลองทำตามนี้

"[A-Za-z0-9_-]+"

ควรอนุญาตให้มีเครื่องหมายขีดล่างและขีดกลาง


โซลูชันของคุณช่วยฉัน ขอบคุณ!
Saiyan Prince

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.